当pong到达屏幕边界时为玩家添加点数

时间:2017-05-24 20:06:36

标签: python pygame collision pong

def pong_collision(paddles, pong, size):
    ''' paddles and pong out of bounds collison '''

    for paddle in paddles:
        ends = [0, size[0] - paddle.rect.width]

        # pong|paddle collision
        if paddle.rect.colliderect(pong.rect):
            pong.vel.x = -pong.vel.x
            pong.music.sound.play(loops=0, maxtime=0, fade_ms=0)


        if (ends[1] <= pong.rect.x or pong.rect.x <= ends[0]):
        # pong out of bounds collision

            if pong.rect.x <= ends[0]:
                # add point to right paddle if pong is < 0
                if paddle.side == 'right':
                    paddle.text.value += 1

            if pong.rect.x >= ends[1]:
                # add poitn to left paddle if pong is > screen size
                if paddle.side == 'left':
                    paddle.text.value += 1


            # freezes ball until user starts game
            pong.state = False

            # resets pong position to initial
            pong.rect.topleft = [
                (size[0]-pong.rect.width)/2,
                (size[1]-pong.rect.height)/2
            ]

所以我上面有乒乓碰撞检测,可以检测乒乓球到达屏幕边界的时间。假设发生的是玩家而不是分数得分。然后,球暂停并重置到屏幕中间。一切都很好,除了一件事,当正确的球员得分时,该点不会被添加。

我很困惑为什么会发生这种情况,显然两个桨的碰撞检测是一样的,那为什么一个不工作呢?

1 个答案:

答案 0 :(得分:1)

由于你有for paddle in paddles:,如果球超出界限,它会在迭代通过两个桨之前重置,我的猜测是左桨是桨组中的第一个。

解决这个问题的一种方法是在确定球超出范围时迭代桨,以确保评估两个桨。