本文整理汇总了Python中panda3d.bullet.BulletRigidBodyNode.getAngularVelocity方法的典型用法代码示例。如果您正苦于以下问题:Python BulletRigidBodyNode.getAngularVelocity方法的具体用法?Python BulletRigidBodyNode.getAngularVelocity怎么用?Python BulletRigidBodyNode.getAngularVelocity使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类panda3d.bullet.BulletRigidBodyNode
的用法示例。
在下文中一共展示了BulletRigidBodyNode.getAngularVelocity方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: Chunk
# 需要导入模块: from panda3d.bullet import BulletRigidBodyNode [as 别名]
# 或者: from panda3d.bullet.BulletRigidBodyNode import getAngularVelocity [as 别名]
class Chunk(Entity):
chunkmass = 5.0
def __init__(self, world, blocks, pos, hpr=Point3(0,0,0), diff = Vec3(0,0,0), angVel = Vec3(0,0,0), linVel = Vec3(0,0,0)):
super(Chunk, self).__init__()
self.mass = len(blocks)*Chunk.chunkmass
self.world = world
self.blocks = blocks
self.bnode = BulletRigidBodyNode()
self.bnode.setMass(self.mass)
self.bnode.setAngularFactor(Vec3(0,1,0))
self.bnode.setLinearSleepThreshold(20)
self.bnode.setAngularSleepThreshold(20)
self.bnode.setAngularVelocity(angVel)
self.bnode.setLinearVelocity(linVel)
self.np = utilities.app.render.attachNewNode(self.bnode)
self.np.setPos(pos.x,20,pos.y)
self.np.setHpr(hpr)
self.np.setPos(self.np, diff)
self.bnode.setPythonTag("entity", self)
self.inScope = False # culling not done yet
# centre the blocks around the np and add their shapes in.
self.minMax()
cog = Point2((self.minX+self.maxX) / 2.0, (self.minY+self.maxY) / 2.0)
for block in blocks:
block.rebuild(self, cog)
world.bw.attachRigidBody(self.bnode)
self.hitlist = dict()
def update(self, timer):
for index in self.hitlist:
# returns true if the wall is destroyed by the hit
if self.blocks[index].hitby(self.hitlist[index]):
self.blocks[index].destroy()
self.rebuild(index)
self.hitlist.clear()
if self.playerDistance() > 40.0:
self.bnode.setAngularSleepThreshold(1)
self.bnode.setLinearSleepThreshold(1)
else:
self.bnode.setAngularSleepThreshold(0)
self.bnode.setLinearSleepThreshold(0)
def playerDistance(self):
sp = self.np.getPos()
pp = self.world.player.node.getPos()
distance = hypot(sp.x - pp.x, sp.z - pp.z)
return distance
# remove an element and rebuild
# TODO add another method for removing multiple
# blocks in a single go
def rebuild(self, index):
deadblock = self.blocks[index]
out = list()
for block in self.blocks:
for edge in block.edges:
if edge == deadblock:
block.edges.remove(edge)
for block in deadblock.edges:
chunk = list()
self.searchBlock(block, chunk, deadblock)
out.append(chunk)
#out is a list of lists of populated blocks
#remove duplicate chunks
results = list()
for chunk in out:
chunk.sort(compareBlock)
if not chunk in results and len(chunk) > 0:
results.append(chunk)
for result in results:
self.minMax(result)
#diff = Point2((self.minX+self.maxX) / 2.0, (self.minY+self.maxY) / 2.0)
diff = Vec3((self.minX+self.maxX) / 2.0, 0, (self.minY+self.maxY) / 2.0)
p = self.np.getPos()
pos = Point2(p.x, p.z)
h = self.np.getHpr()
self.world.entities.append(Chunk(self.world, result, pos, h, diff, self.bnode.getAngularVelocity(), self.bnode.getLinearVelocity()))
self.destroyNow()
self.remove = True
def searchBlock(self, block, lst, deleted):
if block in lst:
return
else:
#.........这里部分代码省略.........