Python pygame+;pyBox2D——扭矩?

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

我目前正在尝试使用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不接触它)

你想要施加扭矩的动态身体的密度是多少?也许你需要设定一下?密度影响动力学体的质量和旋转质量。如果密度是0,那么系统会认为物体有无限的质量,在这种情况下施加扭矩不会有多大作用。结果我忘了包括任何实际的夹具定义,哎哟!谢谢你让我仔细检查,这已经让我发疯了。你希望能够施加扭矩的动态物体的密度是多少?也许你需要设定一下?密度影响动力学体的质量和旋转质量。如果密度是0,那么系统会认为物体有无限的质量,在这种情况下施加扭矩不会有多大作用。结果我忘了包括任何实际的夹具定义,哎哟!谢谢你让我仔细检查,这让我发疯了。