提问者:小点点

tkinter中的乒乓球游戏,检查球是否击中垂直桨


我正在尝试用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

共2个答案

匿名用户

你的想法是对的,但也有一些罕见的情况下,球可以通过桨。

第一个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坐标设置约束?例如,如果球刚好落在球拍下端,我想你的代码不会把它算作击球。

希望这有帮助!