簡體   English   中英

我正在通過Livewire使用Pygame制作Pong游戲,但碰撞檢測無法正常工作

[英]I'm making a Pong game using Pygame through livewires and I can't get the collision detection to work propery

當我在閱讀初學者的Python編程時正在開發一個乒乓游戲,但我迷失了該游戲代碼中缺少的內容。 游戲中的所有內容均正常運行,但只要球與棋盤精靈重疊時,它均無法檢測到,並一直到達窗口邊緣,從而結束游戲。

# single player pong
# the player must rebound the ball to avoid it going off screen.

from livewires import games, color

games.init(screen_width = 1152, screen_height = 768, fps = 60)

class board(games.Sprite):
    """The object used to bounce the ball."""
    image = games.load_image("paddle.png")

    def __init__(self):
        """initialize the board"""
        super(board, self).__init__(image = board.image,
                                   y = games.mouse.y,
                                   right = games.screen.width)

    def update(self): 
        """
        :return:move mouse to y position
        """
        self.y = games.mouse.y

        if self.top < 0:
            self.top = 0

        if self.bottom > games.screen.height:
            self.bottom = games.screen.height
        self.check_rebound()


    def check_rebound(self):
        """Check for ball rebound"""
        for ball in self.overlapping_sprites:
            ball.rebound()


class ball(games.Sprite):
    """ A bouncing pizza."""
    image = games.load_image("ball.png")
    def __init__(self):
        """initialize the ball"""
        super(ball, self).__init__(image = ball.image,
                                  x = games.screen.width/2,
                                  y = games.screen.height/2,
                                  dx = 1,
                                  dy = 1)

    def end_game(self):
        """ End the game. """
        end_message = games.Message(value = "Game Over",
                                    size = 90,
                                    color = color.red,
                                    x = games.screen.width/2,
                                    y = games.screen.height/2,
                                    lifetime = 5 * games.screen.fps,
                                    after_death = games.screen.quit)
        games.screen.add(end_message)

    def update(self):
        """ Reverse a velocity component if edge of screen is reached and end game if the right    wall is reached."""
        if  self.left < 0:
            self.dx = -self.dx

        if self.bottom > games.screen.height or self.top < 0:
            self.dy = -self.dy

        if self.right > games.screen.width:
            self.end_game()
            self.destroy()


    def rebound(self):
        "Ball rebounds from board."
        self.dx = -self.dx
        self.dy = -self.dy

def main():
    """ Play the game. """


    the_board = board()
    games.screen.add(the_board)

    the_ball = ball()
    games.screen.add(the_ball)
    games.screen.add(the_ball)

    games.mouse.is_visible = False

    games.screen.event_grab = True
    games.screen.mainloop()

# start it up!
main()

抱歉,如果代碼有點古怪,我必須將其空間增加四倍,才能在網站上工作。

在反彈方法中刪除dy = -dy

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM