【问题标题】:Python & Pygame: Unexpected crash during run-timePython & Pygame:运行时意外崩溃
【发布时间】:2015-03-12 01:02:44
【问题描述】:

我目前正在使用 Pygame 在 Python 中进行 pong 克隆。我远不是编程主题的专家,并且遇到了错误。每当我运行我当前拥有的代码时,这些代码将在下面列出,并用 Blockquotes 分隔,程序将冻结,并且没有响应。我无法用我所拥有的一点知识来判断问题可能是什么。我希望有人能够在这个问题上帮助我。我目前正在使用一个教程来帮助指导我完成这个游戏的制作,此时代码看起来非常相似。我将在教程here 中包含一个超级链接。我感谢任何和所有反馈。

3000X_runner.py

import GameObj

if __name__ == '__main__':
    game = GameObj.Game()
    game.run()

PongPaddle.py

import os, pygame

class Paddle(pygame.sprite.Sprite):
    def __init__(self, user, xy):
        pygame.sprite.Sprite.__init__(self)
        if user == 1:
            self.image = pygame.image.load(os.path.join("images", "playerPaddle.png"))
        else:
            self.image = pygame.image.load(os.path.join("images", "opponentPaddle.png"))

        self.rect = self.image.get_rect()

        self.rect.centerx, self.rect.centery = xy
        self.movement_speed = 5
        self.velocity = 0

    def up(self):
        self.velocity -= self.movement_speed

    def down(self):
        self.velocity += self.movement_speed

    def move(self, dy):
        if self.rect.bottom + dy > 720:
            self.rect.bottom = 720
        elif self.rect.top + dy < 0:
            self.rect.bottom = 0
        else: self.rect.y += dy

    def update(self):
        self.move(self.velocity)

GameObj.py

import os, pygame, PongPaddle

class Game(object):
def __init__(self):
    pygame.init()

    #setup screen width/height
    self.screen = pygame.display.set_mode((1080, 720))
    self.clock = pygame.time.Clock()  #setups internal pygame clock

    #Mandatory silly name featuring extra numbers for game name
    pygame.display.set_caption("Hyper Pong 3000-X")

    #create background.
    self.background = pygame.Surface((1080, 720))
    self.background.fill((0,0,0)) #black background

    #draws a white line down the middle of screen
    #line(Surface, color, start_pos, end_pos, width=1) -> Rect
    pygame.draw.line(self.background, (255, 255, 255), (540, 0), (540, 720), 5)
    self.screen.blit(self.background, (0, 0))  #blits to screen

    #I shall render all the sprites here:
    self.sprites = pygame.sprite.OrderedUpdates()

    #setting up the paddles and adding them to my sprite group
    self.player_paddle = PongPaddle.Paddle(1, (50, 200))
    self.sprites.add(self.player_paddle)
    self.opponent_paddle = PongPaddle.Paddle(2, (1030, 200))
    self.sprites.add(self.opponent_paddle)

def run(self):
    stillPlaying= True
    while stillPlaying:
        self.clock.tick(30)

        #handles our pygame events, giving us a easy to view, clutter free game loop
        stillPlaying = self.handleEvents

        #updates all of our sprites
        for sprite in self.sprites:
            sprite.update()

        self.sprites.clear(self.screen, self.background)
        dirty = self.sprites.draw(self.screen)

        pygame.display.update(dirty)

def handleEvents(self):
    #here we handle all of our events, such as when either player will
    #press a key to move, quit the game, etc etc.
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            return False
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_ESCAPE:
                return False

            #player1 keydown events
            if event.key == pygame.K_w:
                self.player_paddle.up()
            if event.key == pygame.K_s:
                self.player_paddle.down()

            #player2 keydown events
            if event.key == pygame.K_UP:
                self.opponent_paddle.up()
            if event.key == pygame.K_DOWN:
                self.opponent_paddle.down()

        elif event.type == pygame.KEYUP:
            #player1 keyup events
            if event.key == pygame.K_w:
                self.player_paddle.down()
            if event.key == pygame.K_s:
                self.player_paddle.up()

            #player2 keyup events
            if event.key == pygame.K_UP:
                self.opponent_paddle.down()
            if event.key == pygame.K_DOWN:
                self.opponent_paddle.up()

    return True

【问题讨论】:

    标签: python crash runtime pygame freeze


    【解决方案1】:

    只是忘记在 GameObj.py 中添加 () 之后 stillPlaying = self.handleEvents 它应该看起来像:stillPlaying = self.handleEvents()

    【讨论】:

      猜你喜欢
      • 2012-05-02
      • 1970-01-01
      • 1970-01-01
      • 2016-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-28
      相关资源
      最近更新 更多