Python& Pygame:运行期间意外崩溃

时间:2015-03-12 01:02:45

标签: python crash runtime pygame freeze

我目前正在使用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

1 个答案:

答案 0 :(得分:0)

之后忘记在GameObj.py中添加() stillPlaying = self.handleEvents 它应该如下所示:stillPlaying = self.handleEvents()