我正在尝试用python tkinter实现一个乒乓球游戏。我在画布的左侧有一个球拍,我想检测球与球拍的碰撞。我无法正确地检测到碰撞,因为有时球刚刚穿过球拍。请任何帮助是感激的,下面是我使用的碰撞检测代码,不确定它有什么问题。我试图实现的是,如果球的位置在桨叶顶部和底部之间,在左右之间,那么就存在碰撞
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
你的想法是对的,但也有一些罕见的情况下,球可以通过桨。
第一个if语句检查球和桨的y位置。如果球的任何部分在拨杆位置[1]
和拨杆位置[3]
之间,则该值应返回真值。
第二个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
假设ball\u pos[1]
是球的边界框的左下顶点的y坐标,是否也应该对球的边界框的右上顶点的y坐标设置约束?例如,如果球刚好落在球拍下端,我想你的代码不会把它算作击球。
希望这有帮助!