我正在开发一个简单的 2D 自顶向下游戏,我开始使用 Pymunk 来处理物理问题。
我创建了一个 GameObject 类,它基本上包含一个 pymunk.Body、一个 pymunk.Shape 和一个 pygame.Surface。
这是代码部分,一切都出错了
player = GameObject([-1, 0], [1, 1], (46, 150, 80))
obj = GameObject([1, 0], [1, 1], (255, 255, 255))
SPACE.add(player.getBody(), player.getShape())
SPACE.add(obj.getBody(), obj.getShape())
while True:
CLOCK.tick(FPS)
SPACE.step(1/FPS)
for event in pygame.event.get():
eventHandler(event)
player.setPosition([.2, 0], True)
print(player.getPosition())
好吧,使用 VSCode 调试我看到,在 while True:
的第二次迭代中,在 SPACE.step(1/FPS)
之后,我所有与主体位置相关联的 Vec2d 都变为 NaN。
所以我的 player.getPosition()
返回 Vec2d(NaN, NaN)
并且对象消失(在渲染阶段,因为没有位置渲染它:))。
有人知道为什么 SPACE.step
会破坏一切吗?
谢谢
答案 0 :(得分:0)
通常发生这种情况是因为一个或多个物体的质量或力矩为 0 或无穷大。例如,如果两个具有无限质量的物体发生碰撞,就会发生一些“奇怪”的事情,例如 NaN 位置。确保您已正确设置质量和力矩。如果需要,还要仔细检查您是否设置了 body_type。