本文整理汇总了Python中panda3d.bullet.BulletRigidBodyNode.setDeactivationEnabled方法的典型用法代码示例。如果您正苦于以下问题:Python BulletRigidBodyNode.setDeactivationEnabled方法的具体用法?Python BulletRigidBodyNode.setDeactivationEnabled怎么用?Python BulletRigidBodyNode.setDeactivationEnabled使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类panda3d.bullet.BulletRigidBodyNode
的用法示例。
在下文中一共展示了BulletRigidBodyNode.setDeactivationEnabled方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: setupPlayer
# 需要导入模块: from panda3d.bullet import BulletRigidBodyNode [as 别名]
# 或者: from panda3d.bullet.BulletRigidBodyNode import setDeactivationEnabled [as 别名]
def setupPlayer(self, x, y, z):
yetiHeight = 7
yetiRadius = 2
yetiShape = BulletCapsuleShape(yetiRadius, yetiHeight - 2 * yetiRadius, ZUp)
modelPrefix = "../res/models/yeti_"
self.yetiModel = Actor("../res/models/yeti.egg", {"idle":"../res/models/yeti_idle.egg", "walk":"../res/models/yeti_walking.egg"})
self.yetiModel.setH(90)
self.yetiModel.setPos(0, 0, SNOW_HEIGHT)
playerNode = BulletRigidBodyNode("Player")
playerNode.setMass(MASS)
playerNode.addShape(yetiShape)
# Without this set to 0,0,0, the Yeti would wobble like a Weeble but not fall down.
playerNode.setAngularFactor(Vec3(0,0,0))
# Without this disabled, things will weld together after a certain amount of time. It's really annoying.
playerNode.setDeactivationEnabled(False)
playerNP = self.worldNP.attachNewNode(playerNode)
playerNP.setPos(x, y, z)
playerNP.setH(270)
self.yetiModel.reparentTo(playerNP)
self.bulletWorld.attachRigidBody(playerNP.node())
# Hopefully Brandon will get those animation files to me so I can convert them.
# self.setAnimation('idle')
return playerNP
示例2: makeBall
# 需要导入模块: from panda3d.bullet import BulletRigidBodyNode [as 别名]
# 或者: from panda3d.bullet.BulletRigidBodyNode import setDeactivationEnabled [as 别名]
def makeBall(self, num, pos = (0, 0, 0)):
shape = BulletSphereShape(0.5)
node = BulletRigidBodyNode('ball_' + str(num))
node.setMass(1.0)
node.setRestitution(.9)
node.setDeactivationEnabled(False)
node.addShape(shape)
physics = render.attachNewNode(node)
physics.setPos(*pos)
self.world.attachRigidBody(node)
model = loader.loadModel('models/ball')
color = self.makeColor()
model.setColor(color)
self.ballColors['ball_' + str(num)] = color
model.reparentTo(physics)
示例3: SMAI
# 需要导入模块: from panda3d.bullet import BulletRigidBodyNode [as 别名]
# 或者: from panda3d.bullet.BulletRigidBodyNode import setDeactivationEnabled [as 别名]
class SMAI():
#This constructs the nods tree needed for an AIChar object.
#Takes in a model as a string, a speed double, a world object, a bullet physics world and n x, y and z positions
def __init__(self, model, speed, world, worldNP, x, y, z):
self.AISpeed = 80000
self.maxSpeed = speed
self.AIX = x
self.AIY = y
self.AIZ = z
self.worldNP = worldNP
bulletWorld = world
self.type = ""
self.AIModel = loader.loadModel(model)
self.AIModel.setScale(0.5)
self.AIModel.reparentTo(render)
AIShape = BulletBoxShape(Vec3(3, 3, 1))
self.AINode = BulletRigidBodyNode('AIChar')
self.AINode.setMass(100)
self.AINode.addShape(AIShape)
self.AINode.setDeactivationEnabled(False)
self.AINode.setAngularFactor(Vec3(0,0,0))
render.attachNewNode(self.AINode)
self.AIChar = self.worldNP.attachNewNode(self.AINode)
self.AIModel.reparentTo(self.AIChar)
self.AIChar.setPos(x, y, z)
bulletWorld.attachRigidBody(self.AIChar.node())
#This method needs to be called on your AIChar object to determine what type of AI you want.
#Takes in a type string; either flee or seek and also a target object.
def setBehavior(self, type, target):
if(type == "flee"):
self.type = type
self.target = target
print("Type set to flee")
elif(type == "seek"):
self.type = type
self.target = target
print("Type set to seek")
else:
print("Error @ Incorrect Type!")
def moveTo(self, target):
self.moveTo = True
self.target = target
def flee(self):
h = 1
hx = 1
hy = 1
if(self.AIChar.getDistance(self.target) < 40.0):
if(self.AINode.getLinearVelocity() > self.maxSpeed):
if(self.AINode.getLinearVelocity() < 100):
self.AIChar.setH(self.target.getH())
h = self.AIChar.getH()
else:
hx = sin(h * DEG_TO_RAD) * 10
hy = cos(h * DEG_TO_RAD) * 10
self.AINode.applyForce(Vec3(-hx * self.AISpeed * globalClock.getDt(), hy * self.AISpeed * globalClock.getDt(), 0), PNT)
# else:
# self.AINode.applyForce(Vec3(-hx * self.AISpeed * globalClock.getDt(), hy * self.AISpeed * globalClock.getDt(), 0), PNT)
def seek(self):
if(self.AIChar.getDistance(self.target) > 20.0):
if(self.AINode.getLinearVelocity() > self.maxSpeed):
self.AIChar.lookAt(self.target)
h = self.AIChar.getH()
hx = sin(h * DEG_TO_RAD) * 10
hy = cos(h * DEG_TO_RAD) * 10
self.AINode.applyForce(Vec3(-hx * self.AISpeed * globalClock.getDt(), hy * self.AISpeed * globalClock.getDt(), 0), PNT)
def moveToRun(self):
self.seek()
# if(self.target.getX()+5 <= self.AIChar.getX() and self.target.getX()-5 >= self.AIChar.getX() and self.target.getY()+5 <= self.AIChar.getY() and self.target.getY()-5 >= self.AIChar.getY()):
# print("It's stopped!")
# self.AIChar.clearForces()
# self.AIChar.setLinearVelocity(0)
# else:
# self.AINode.clearForces()
# self.AIChar.lookAt(self.target)
# self.AINode.setLinearVelocity(self.AISpeed)
#Gets called on every AIChar in the world's update method to allow the AI to function at all.
def AIUpdate(self):
if(self.moveTo == True):
self.moveToRun()
if(self.type == "seek"):
self.seek()
elif(self.type == "flee"):
self.flee()
else:
print("Error @ No AI Type")
示例4: Vehicle
# 需要导入模块: from panda3d.bullet import BulletRigidBodyNode [as 别名]
# 或者: from panda3d.bullet.BulletRigidBodyNode import setDeactivationEnabled [as 别名]
class Vehicle(object):
def __init__(self, positionHpr, render, world, base):
self.base = base
loader = base.loader
position, hpr = positionHpr
vehicleType = "yugo"
self.vehicleDir = "data/vehicles/" + vehicleType + "/"
# Load vehicle description and specs
with open(self.vehicleDir + "vehicle.json") as vehicleData:
data = json.load(vehicleData)
self.specs = data["specs"]
# Chassis for collisions and mass uses a simple box shape
halfExtents = (0.5 * dim for dim in self.specs["dimensions"])
shape = BulletBoxShape(Vec3(*halfExtents))
ts = TransformState.makePos(Point3(0, 0, 0.5))
self.rigidNode = BulletRigidBodyNode("vehicle")
self.rigidNode.addShape(shape, ts)
self.rigidNode.setMass(self.specs["mass"])
self.rigidNode.setDeactivationEnabled(False)
self.np = render.attachNewNode(self.rigidNode)
self.np.setPos(position)
self.np.setHpr(hpr)
world.attachRigidBody(self.rigidNode)
# Vehicle physics model
self.vehicle = BulletVehicle(world, self.rigidNode)
self.vehicle.setCoordinateSystem(ZUp)
world.attachVehicle(self.vehicle)
# Vehicle graphical model
self.vehicleNP = loader.loadModel(self.vehicleDir + "car.egg")
self.vehicleNP.reparentTo(self.np)
# Create wheels
wheelPos = self.specs["wheelPositions"]
for fb, y in (("F", wheelPos[1]), ("B", -wheelPos[1])):
for side, x in (("R", wheelPos[0]), ("L", -wheelPos[0])):
np = loader.loadModel(self.vehicleDir + "tire%s.egg" % side)
np.reparentTo(render)
isFront = fb == "F"
self.addWheel(Point3(x, y, wheelPos[2]), isFront, np)
def addWheel(self, position, isFront, np):
wheel = self.vehicle.createWheel()
wheelSpecs = self.specs["wheels"]
wheel.setNode(np.node())
wheel.setChassisConnectionPointCs(position)
wheel.setFrontWheel(isFront)
wheel.setWheelDirectionCs(Vec3(0, 0, -1))
wheel.setWheelAxleCs(Vec3(1, 0, 0))
wheel.setWheelRadius(wheelSpecs["radius"])
wheel.setMaxSuspensionTravelCm(wheelSpecs["suspensionTravel"] * 100.0)
wheel.setSuspensionStiffness(wheelSpecs["suspensionStiffness"])
wheel.setWheelsDampingRelaxation(wheelSpecs["dampingRelaxation"])
wheel.setWheelsDampingCompression(wheelSpecs["dampingCompression"])
wheel.setFrictionSlip(wheelSpecs["frictionSlip"])
wheel.setRollInfluence(wheelSpecs["rollInfluence"])
def initialiseSound(self, audioManager):
"""Start the engine sound and set collision sounds"""
# Set sounds to play for collisions
self.collisionSound = CollisionSound(
nodePath=self.np, sounds=["data/sounds/09.wav"], thresholdForce=600.0, maxForce=800000.0
)
self.engineSound = audioManager.loadSfx(self.vehicleDir + "engine.wav")
audioManager.attachSoundToObject(self.engineSound, self.np)
self.engineSound.setLoop(True)
self.engineSound.setPlayRate(0.6)
self.engineSound.play()
self.gearSpacing = self.specs["sound"]["maxExpectedRotationRate"] / self.specs["sound"]["numberOfGears"]
self.reversing = False
def updateSound(self, dt):
"""Use vehicle speed to update sound pitch"""
soundSpecs = self.specs["sound"]
# Use rear wheel rotation speed as some measure of engine revs
wheels = (self.vehicle.getWheel(idx) for idx in (2, 3))
# wheelRate is in degrees per second
wheelRate = 0.5 * abs(sum(w.getDeltaRotation() / dt for w in wheels))
# Calculate which gear we're in, and what the normalised revs are
if self.reversing:
numberOfGears = 1
else:
numberOfGears = self.specs["sound"]["numberOfGears"]
gear = min(int(wheelRate / self.gearSpacing), numberOfGears - 1)
posInGear = (wheelRate - gear * self.gearSpacing) / self.gearSpacing
targetPlayRate = 0.6 + posInGear * (1.5 - 0.6)
currentRate = self.engineSound.getPlayRate()
#.........这里部分代码省略.........
示例5: CharacterController
# 需要导入模块: from panda3d.bullet import BulletRigidBodyNode [as 别名]
# 或者: from panda3d.bullet.BulletRigidBodyNode import setDeactivationEnabled [as 别名]
class CharacterController(DynamicObject, FSM):
def __init__(self, game):
self.game = game
FSM.__init__(self, "Player")
# key states
# dx direction left or right, dy direction forward or backward
self.kh = self.game.kh
self.dx = 0
self.dy = 0
self.jumping = 0
self.crouching = 0
# maximum speed when only walking
self.groundSpeed = 5.0
# acceleration used when walking to rise to self.groundSpeed
self.groundAccel = 100.0
# maximum speed in the air (air friction)
self.airSpeed = 30.0
# player movement control when in the air
self.airAccel = 10.0
# horizontal speed on jump start
self.jumpSpeed = 5.5
self.turnSpeed = 5
self.moveSpeedVec = Vec3(0,0,0)
self.platformSpeedVec = Vec3(0,0,0)
h = 1.75
w = 0.4
self.shape = BulletCapsuleShape(w, h - 2 * w, ZUp)
self.node = BulletRigidBodyNode('Player')
self.node.setMass(2)
self.node.addShape(self.shape)
self.node.setActive(True, True)
self.node.setDeactivationEnabled(False, True)
self.node.setFriction(200)
#self.node.setGravity(10)
#self.node.setFallSpeed(200)
self.node.setCcdMotionThreshold(1e-7)
self.node.setCcdSweptSphereRadius(0.5)
self.node.setAngularFactor(Vec3(0,0,1))
self.np = self.game.render.attachNewNode(self.node)
self.np.setPos(0, 0, 0)
self.np.setH(0)
#self.np.setCollideMask(BitMask32.allOn())
self.game.world.attachRigidBody(self.node)
self.playerModel = None
self.slice_able = False
def setActor(self, modelPath, animDic={}, flip = False, pos = (0,0,0), scale = 1.0):
self.playerModel = Actor(modelPath, animDic)
self.playerModel.reparentTo(self.np)
self.playerModel.setScale(scale) # 1ft = 0.3048m
if flip:
self.playerModel.setH(180)
self.playerModel.setPos(pos)
self.playerModel.setScale(scale)
#-------------------------------------------------------------------
# Speed
def getSpeedVec(self):
return self.node.getLinearVelocity()
def setSpeedVec(self, speedVec):
#print "setting speed to %s" % (speedVec)
self.node.setLinearVelocity(speedVec)
return speedVec
def setPlatformSpeed(self, speedVec):
self.platformSpeedVec = speedVec
def getSpeed(self):
return self.getSpeedVec().length()
def setSpeed(self, speed):
speedVec = self.getSpeedVec()
speedVec.normalize()
self.setSpeedVec(speedVec*speed)
def getLocalSpeedVec(self):
return self.np.getRelativeVector(self.getSpeed())
def getSpeedXY(self):
vec = self.getSpeedVec()
return Vec3(vec[0], vec[1], 0)
def setSpeedXY(self, speedX, speedY):
vec = self.getSpeedVec()
z = self.getSpeedZ()
self.setSpeedVec(Vec3(speedX, speedY, z))
def getSpeedH(self):
return self.getSpeedXY().length()
#.........这里部分代码省略.........
示例6: Player
# 需要导入模块: from panda3d.bullet import BulletRigidBodyNode [as 别名]
# 或者: from panda3d.bullet.BulletRigidBodyNode import setDeactivationEnabled [as 别名]
class Player(object):
#global playerNode
#playerNode = NodePath('player')
F_MOVE = 400.0
def __init__(self, btWorld):
self._attachControls()
self._initPhysics(btWorld)
self._loadModel()
taskMgr.add(self.mouseUpdate, 'player-task')
taskMgr.add(self.moveUpdate, 'player-task')
self._vforce = Vec3(0,0,0)
#ItemHandling(self.playerNode)
def _attachControls(self):
#base.accept( "s" , self.__setattr__,["walk",self.STOP] )
base.accept("w", self.goForward)
base.accept("w-up", self.nogoForward)
base.accept("s", self.goBack)
base.accept("s-up", self.nogoBack)
base.accept("a", self.goLeft)
base.accept("a-up", self.nogoLeft)
base.accept("d", self.goRight)
base.accept("d-up", self.nogoRight)
base.accept("space", self.goUp)
base.accept("space-up", self.nogoUp)
def _loadModel(self):
#self._model = loader.loadModel("../data/models/d1_sphere.egg")
#self._model.reparentTo(self.playerNode)
pl = base.cam.node().getLens()
pl.setNear(0.2)
base.cam.node().setLens(pl)
def _initPhysics(self, world):
rad = 1
shape = BulletSphereShape(rad)
self._rb_node = BulletRigidBodyNode('Box')
self._rb_node.setMass(80.0)
self._rb_node.setFriction(1.8)
self._rb_node.addShape(shape)
self._rb_node.setAngularFactor(Vec3(0,0,0))
self._rb_node.setDeactivationEnabled(False, True)
self.playerNode = render.attachNewNode(self._rb_node)
self.playerNode.setPos(0, 0, 4)
self.playerNode.setHpr(0,0,0)
world.attachRigidBody(self._rb_node)
self.camNode = self.playerNode.attachNewNode("cam node")
base.camera.reparentTo(self.camNode)
self.camNode.setPos(self.camNode, 0, 0, 1.75-rad)
#self.camNode.setPos(self.camNode, 0, -5,0.5)
#self.camNode.lookAt(Point3(0,0,0),Vec3(0,1,0))
def mouseUpdate(self,task):
md = base.win.getPointer(0)
dx = md.getX() - base.win.getXSize()/2.0
dy = md.getY() - base.win.getYSize()/2.0
yaw = dx/(base.win.getXSize()/2.0) * 90
self.camNode.setHpr(self.camNode, -yaw, 0, 0)
#base.camera.setHpr(base.camera, yaw, pith, roll)
base.win.movePointer(0, base.win.getXSize() / 2, base.win.getYSize() / 2)
return task.cont
def moveUpdate(self,task):
if (self._vforce.length() > 0):
#self.rbNode.applyCentralForce(self._vforce)
self._rb_node.applyCentralForce(self.playerNode.getRelativeVector(self.camNode, self._vforce))
else:
pass
return task.cont
def goForward(self):
self._vforce.setY( self.F_MOVE)
def nogoForward(self):
self._vforce.setY( 0)
def goBack(self):
self._vforce.setY(-self.F_MOVE)
def nogoBack(self):
self._vforce.setY( 0)
def goLeft(self):
self._vforce.setX(-self.F_MOVE)
def nogoLeft(self):
self._vforce.setX( 0)
def goRight(self):
self._vforce.setX( self.F_MOVE)
def nogoRight(self):
self._vforce.setX( 0)
def goUp(self):
self._vforce.setZ( self.F_MOVE*1.4)
def nogoUp(self):
self._vforce.setZ( 0)
#.........这里部分代码省略.........
示例7: BulletNPC
# 需要导入模块: from panda3d.bullet import BulletRigidBodyNode [as 别名]
# 或者: from panda3d.bullet.BulletRigidBodyNode import setDeactivationEnabled [as 别名]
class BulletNPC(DynamicObject):
def __init__(self, name, game, pos):
self.game = game
self.name = name
self.jumping = 0
self.crouching = 0
# maximum speed when only walking
self.groundSpeed = 4.0
# acceleration used when walking to rise to self.groundSpeed
self.groundAccel = 150.0
self.groundFriction = 0.0
# maximum speed in the air (air friction)
self.airSpeed = 30.0
# player movement control when in the air
self.airAccel = 10.0
# horizontal speed on jump start
self.jumpSpeed = 5.5
self.turnSpeed = 5
self.moveSpeedVec = Vec3(0, 0, 0)
self.platformSpeedVec = Vec3(0, 0, 0)
h = 1.75
w = 0.4
self.shape = BulletCapsuleShape(w, h - 2 * w, ZUp)
self.node = BulletRigidBodyNode(self.name)
self.node.setMass(1.0)
self.node.addShape(self.shape)
self.node.setActive(True, True)
self.node.setDeactivationEnabled(False, True)
self.node.setFriction(self.groundFriction)
# self.node.setGravity(10)
# self.node.setFallSpeed(200)
self.node.setCcdMotionThreshold(1e-7)
# do not use setCcdSweptSphereRadius
# it messes up the bite contact test
# self.node.setCcdSweptSphereRadius(0.5)
self.node.setAngularFactor(Vec3(0, 0, 1))
self.np = self.game.render.attachNewNode(self.node)
self.setPos(pos)
self.setH(0)
# self.np.setCollideMask(BitMask32.allOn())
self.game.world.attachRigidBody(self.node)
self.playerModel = Actor(
"models/monsters/ghoul2.egg",
{"idle": "models/monsters/ghoul2-idle.egg", "walk": "models/monsters/ghoul2-walk.egg"},
)
self.playerModel.setScale(0.15)
self.playerModel.setZ(0.15)
self.playerModel.reparentTo(self.np)
interval = Wait(random.uniform(0, 1))
i2 = Func(self.startWalkAnim)
seq = Sequence()
seq.append(interval)
seq.append(i2)
seq.start()
self.growlTimer = 5.0
self.sound = None
self.alive = True
self.targetNp = NodePath(self.name)
self.brainTimer = 0.0
self.brainDelay = 1.2
self.currentForce = Vec3(0, 0, 0)
def startWalkAnim(self):
self.playerModel.loop("walk")
def stopWalkAnim(self):
self.playerModel.loop("idle")
def checkFront(self):
p1 = Point3(self.getPos())
direction = self.game.playerNp.getPos() - self.getPos()
direction.normalize()
direction = direction * 2.0
p2 = Point3(self.getPos() + direction)
result = self.game.world.rayTestClosest(p1, p2)
# ts1 = TransformState.makePos(p1)
# ts2 = TransformState.makePos(p2)
# result = self.game.world.sweepTestClosest(self.shape, ts1, ts2, 0)
#.........这里部分代码省略.........