2

我正在尝试使用 Python 中的 Pygame 和 Pymunk 制作像 Pocket Tanks 这样的坦克战游戏。我有一个动态的身体是坦克和一个静态的身体是地面。一切正常,直到一段时间后,坦克自行向左移动并沉入地面静态体,并在“无剪切”穿过地面时不断上下弹跳。

我所有的代码都可以在这里找到: https ://github.com/MysteryCoder456/PyTanks.io

这是发生了什么的视频(请记住,坦克降落在地面后只需按一次“D”键): https ://streamable.com/2fuzz

编辑:我正在使用 Python 3.7.6、Pygame 2.0.0dev6、MacOS 10.15.3。我不知道哪个版本的 Pymunk。

4

1 回答 1

1

可能导致该行为的一件事是不要将重心 (CoG) 放在实际中心(或靠近它)。在您的代码中,地面和坦克多边形形状的构建方式意味着它们的重心将位于形状的第一个角,即 (0,0)。尝试将多边形顶点构建为:

 self.vertices = (
        (-width/2, -height/2),
        (width/2, - height/2),
        (width/2, height/2),
        (-width/2, height/2)
    )

这与Pymunk/Chipmunk2d 的问题类似 - 动态物体与静态物体碰撞产生碰撞脉冲 我将在 pymunk 的文档中澄清这一点,这似乎是一个容易犯的错误。

于 2020-02-24T09:00:09.860 回答