我试图在pybox2d中创建逼真的仿真,但是在使动态圆按预期方式碰撞时遇到了问题。
这是正在发生的事情:
这是所期望的:
圈/球代码:
class Ball(object):
"""Simulates game ball."""
def __init__(self, world, initPos=(0.55,0.35), radius=0.05,
density=0.00001, restitution=1.0):
bodyDef = Box2D.b2BodyDef()
bodyDef.type = Box2D.b2_dynamicBody
bodyDef.position = initPos
self.body = world.CreateBody(bodyDef)
shape = Box2D.b2CircleShape(radius=radius)
self.body.CreateFixture(shape=shape, density=density,
restitution=restitution)
def getPoint(self):
return (self.body.position[0], self.body.position[1], 0)
def getQuaternion(self):
angle = self.body.angle % (2.0 * math.pi)
return quaternion_from_euler(0, 0, angle)
墙壁/世界的代码:
class World(Box2D.b2World):
"""Simulates world for car to exist in"""
WALL_THICKNESS = 0.02 # meters
def __init__(self, width, height):
super(World, self).__init__()
self.gravity = (0,0)
self.gndBody = self.CreateBody()
gndShape = Box2D.b2PolygonShape(box=(width,height))
gndFixtureDef = Box2D.b2FixtureDef(shape=gndShape)
gndFixtureDef.isSensor = True
self.gndBody.CreateFixture(gndFixtureDef)
self.wallBodies = []
wallPos = [(0, height), (width, 0), (0,0), (0,0)]
for i in range(len(wallPos)):
wallBody = self.CreateBody(position=wallPos[i])
if (i % 2) == 0:
wallShape = Box2D.b2PolygonShape(box=(width, self.WALL_THICKNESS))
else:
wallShape = Box2D.b2PolygonShape(box=(self.WALL_THICKNESS, height))
wallFixtureDef = Box2D.b2FixtureDef(shape=wallShape, restitution=0.01)
wallBody.CreateFixture(wallFixtureDef)
self.wallBodies.append(wallBody)
让我知道是否需要更多信息。谢谢!