如何克服Pygame中因加速导致精灵侵入地板的问题?

问题描述

我正在尝试编写我的 Pygame 游戏代码,以便玩家在不接触地板的任何时候摔倒。问题是编码它的方法是测试玩家 y 坐标是否低于 0,然后停止下降过程,但是 cuadratic 函数并不总是会精确到 y = 0,因为它每次移动更多像素帧,也许第一个小于 0 的值是 -10。然后玩家最终出现在屏幕下方。

我考虑过测试玩家的 y 坐标是否低于 0,然后将他传送到 y = 0,但这感觉是一个非常不优雅的解决方案,而且它还使玩家传送了一帧。

解决方法

“我想过测试玩家的 y 坐标是否低于 0,然后将他传送到 y = 0,但这感觉是一个非常不优雅的解决方案”

这是通常的方式。碰撞阻止玩家坠落。

“它还使玩家传送一帧。”

不,不是。您必须在碰撞检测之后和绘制之前“传送”播放器层。

您在每一帧中都进行一次碰撞检测。一旦检测到碰撞,您就知道玩家自上一帧以来在移动时在某个点碰到了物体。您不是计算玩家击中物体并停止移动的确切时间,而是通过物体限制玩家的位置。