我正在创建一个 2D 游戏。我在游戏中实现了一个物理引擎,所以当玩家跳跃时,他的弧线会跟随游戏中给定的速度和重力的路径。当玩家下落时,它的下落距离会越来越大,因为它有加速度。
如果新位置将玩家置于对象的另一侧,我如何知道玩家是否与路径中的某物发生碰撞?
我可以使用循环并测试玩家路径上的每个点。这是唯一的方法吗?有没有更优雅的算法或 pygame 解决方案?
我正在创建一个 2D 游戏。我在游戏中实现了一个物理引擎,所以当玩家跳跃时,他的弧线会跟随游戏中给定的速度和重力的路径。当玩家下落时,它的下落距离会越来越大,因为它有加速度。
如果新位置将玩家置于对象的另一侧,我如何知道玩家是否与路径中的某物发生碰撞?
我可以使用循环并测试玩家路径上的每个点。这是唯一的方法吗?有没有更优雅的算法或 pygame 解决方案?
我担心 Pygame 本身无法帮助你。它有一些 api 可帮助您确定矩形是否相交,但正如您所发现的,如果一个实体的移动速度足够快,它们可能在一次更新时位于地面的一侧,而在下一次更新时则清楚另一侧边。这有时被称为“隧道”。
解决此问题的最简单方法:不要让您的实体移动得足够快以穿过地面(或其他实体)。您可以对下落的实体应用“终端速度”,或增加碰撞检测的频率。
有更复杂的算法可以解决这个问题,通常称为“连续碰撞算法”,但这些更复杂。网上有大量关于这些算法的信息,所以如果你愿意,我会留给你去研究。
一种解决方案是在速度矢量的对面添加一条不可见的尾巴,其长度足以补偿帧之间的大距离。