我正在尝试对我的平台游戏实施碰撞检测。当我尝试运行游戏时,我只是通过平台,而不是在玩家击中它时停止。任何帮助或建议将不胜感激。 My full code can be found here
def collision_detect(self,x1,y1,platform):
#Stops the player from falling once they hit the platform by setting falling to false
if self.x > platform.x and self.x < platform.x2:
if self.y == platform.y:
self.yVel += 0
答案 0 :(得分:1)
在逻辑和实施方面存在一些错误。
在你的collision_detect
中,你说你将堕落的状态改为假,但你永远不会这样做。此外,您在检查之前将fall设置为true。但请先看看我的其他观点。
玩家不应该有“摔倒”或“不摔倒”的状态。重力始终存在,因此玩家始终坠落。如果有一个平台来阻止它,速度会降到0,就是这样。就像你实际上正在摔倒,但是地板会阻止你。
你不应该检查self.y == platform.y
,因为如果你将y坐标增加2或3,你可能会“跳过”确切的坐标,所以你真正想要的是self.y >= platform.y
。
您可以完全删除gravity
方法,只使用collision_detect
方法。
这样的事情:
def collision_detect(self, platform):
if self.x > platform.x and self.x < platform.x2:
if self.y >= platform.y:
self.yVel = 0
else:
self.yVel = 5
在self.collision_detect(platform(0, 500, 800, 20))
函数中使用do
之类的内容尝试。