我正在尝试在python tkinter中实现一个pong游戏。我在画布的左侧有桨,我想检测球与该桨的碰撞。有时球刚刚通过桨,我无法正确检测到碰撞。请任何帮助表示赞赏,以下是我使用的冲突检测代码,不确定它有什么问题。我正在尝试实现的是,如果球的位置在桨叶的上下之间以及左右之间,那么就会发生碰撞
def hit_paddle(self, pos):
""" pos(left, top, right, bottom)"""
paddle_pos = self.canvas.coords(self.shape)
if ball_pos[1] >= paddle_pos[1] and ball_pos[1] <= paddle_pos[3]:
if ball_pos[2] >= paddle_pos[0] and ball_pos[2] <= paddle_pos[2]:
return True
return False
答案 0 :(得分:1)
您的想法正确,但是在极少数情况下,球可能会穿过桨。
第一个if语句检查球和桨的y位置。如果球的任何部分在paddle_pos[1]
和paddle_pos[3]
之间,则应该返回true。
第二条if语句检查x位置,并且具有相同的逻辑。您需要检查球的左侧是否在范围内,因为那是击中左侧桨的球的一部分。
尝试以下代码:
def hit_paddle(self, pos):
""" pos(left, top, right, bottom)"""
paddle_pos = self.canvas.coords(self.shape)
if ball_pos[3] >= paddle_pos[1] and ball_pos[1] <= paddle_pos[3]:
if ball_pos[0] >= paddle_pos[0] and ball_pos[0] <= paddle_pos[2]:
return True
return False
答案 1 :(得分:0)
假设ball_pos[1]
是球的边界框的左下顶点的y坐标,是否不应该对球的边界框的右上顶点的y坐标施加约束?例如,如果球刚好位于桨板的下端,我认为您的代码不会将其计为击球。
希望这会有所帮助!