当我调用SPACE.step(1/FPS)时,我所有的body位置Vec2D变成NaN



我正在制作一款简单的2D自上而下游戏,我开始使用Pymunk来处理物理。

我已经创建了一个GameObject类,它基本上包含了一个pymunk。身体,一只臭鼬。Shape and a 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为什么要摧毁一切吗?Thx

通常发生这种情况是因为一个或几个物体的质量或力矩为0或无穷大。例如,如果两个质量都无穷大的物体相撞,就会发生一些"奇怪的"事情;会发生,例如NaN位置。一定要把质量和力矩设置好。如果需要,还要仔细检查是否设置了body_type。

最新更新