Tkinter的Pong游戏,检查球是否击中了垂直桨

时间:2019-07-03 21:30:48

标签: python tkinter

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

2 个答案:

答案 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坐标施加约束?例如,如果球刚好位于桨板的下端,我认为您的代码不会将其计为击球。

希望这会有所帮助!