我正在尝试使用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 = 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不碰它)