Python pygame+;pyBox2D——扭矩?
我目前正在尝试使用Box2D和pygame前端编写一个物理模拟器。然而,在我的程序中,似乎没有扭矩被正确地应用到任何物体上,我也不确定为什么。使用此示例程序:Python pygame+;pyBox2D——扭矩?,python,box2d,Python,Box2d,我目前正在尝试使用Box2D和pygame前端编写一个物理模拟器。然而,在我的程序中,似乎没有扭矩被正确地应用到任何物体上,我也不确定为什么。使用此示例程序: #!/usr/bin/python import pygame import Box2D as b def main(): pygame.init() pygame.font.init() screen = pygame.display.set_mode((600, 450)) clock = pyga
#!/usr/bin/python
import pygame
import Box2D as b
def main():
pygame.init()
pygame.font.init()
screen = pygame.display.set_mode((600, 450))
clock = pygame.time.Clock()
running = True
world = b.b2World()
world.gravity = (0, -5)
ground = world.CreateStaticBody(
position=(0,-5), shapes=b.b2PolygonShape(box=(60,5)))
obj = world.CreateDynamicBody(
angle=15, position=(30,22), shapes=b.b2PolygonShape(box=(5,5)))
while running:
screen.fill((0, 0, 0))
events = pygame.event.get()
if any(map(lambda e:e.type == pygame.QUIT, events)):
running = False
drawPolygons(screen, obj)
world.Step(1/60, 10, 10)
pygame.display.flip()
clock.tick(60)
pygame.quit()
def drawPolygons(screen, body):
for fixture in body.fixtures:
shape = fixture.shape
vertices = [body.transform*v * 10 for v in shape.vertices]
vertices = [(v[0], 450-v[1]) for v in vertices]
pygame.draw.polygon(screen, (255,255,255), vertices)
if __name__ == '__main__':
main()
如果我这样做,有角度的正方形会掉到地板上,只是成一个角度坐着,而不是翻倒。类似地,将力应用于对象中心以外的点将起到类似于应用于中心的作用。我错过什么了吗
编辑:即使我使用ApplyTorque方法显式应用扭矩,身体也不会旋转,因此我有理由确定这是我的固定装置设置方式的问题,或者可能是我如何绘制它们的问题。否则施力会按预期效果进行,所以我不太确定到底出了什么问题
EDIT2:在进一步的实验之后,似乎除了手动设置角速度之外,没有任何东西会影响我身体的角速度,这真的很奇怪(ApplyTorque不接触它)你想要施加扭矩的动态身体的密度是多少?也许你需要设定一下?密度影响动力学体的质量和旋转质量。如果密度是0,那么系统会认为物体有无限的质量,在这种情况下施加扭矩不会有多大作用。结果我忘了包括任何实际的夹具定义,哎哟!谢谢你让我仔细检查,这已经让我发疯了。你希望能够施加扭矩的动态物体的密度是多少?也许你需要设定一下?密度影响动力学体的质量和旋转质量。如果密度是0,那么系统会认为物体有无限的质量,在这种情况下施加扭矩不会有多大作用。结果我忘了包括任何实际的夹具定义,哎哟!谢谢你让我仔细检查,这让我发疯了。