Pygame填充和闪电不编辑屏幕



我正在熟悉Pygame,我想写一个简单的游戏,我已经有以下代码:

import sys, pygame
pygame.init()
size = width, height = 640, 480
speed = [2, 2]
black = 0, 0, 0
screen = pygame.display.set_mode(size)
ball = pygame.image.load("intro_ball.gif")
ballrect = ball.get_rect()
bar = pygame.image.load("bar_low.gif")
barrect = bar.get_rect(center=(320,475))
over = pygame.image.load("game_over.gif")
overrect = over.get_rect(center=(width/2, height/2 ))
while 1:
    for event in pygame.event.get():
        if event.type == pygame.QUIT: sys.exit()
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_w:
                screen.fill(black)
                screen.blit(over, overrect)
                pygame.display.flip()
                pygame.time.delay(2000)

    keys = pygame.key.get_pressed()
    if keys[pygame.K_RIGHT] and barrect.right < width:
        barrect = barrect.move(4, 0)
        screen.blit(bar, barrect)
        pygame.display.update()
    if keys[pygame.K_LEFT] and barrect.left > 0:
        barrect = barrect.move(-4, 0)
        screen.blit(bar, barrect)
        pygame.display.update()
    ballrect = ballrect.move(speed)
    if ballrect.left < 0 or ballrect.right > width:
        speed[0] = -speed[0]
    if ballrect.top < 0 or (ballrect.bottom > height - bar.get_height() and ballrect.left < barrect.right and ballrect.right > barrect.left):
        speed[1] = -speed[1]
    if ballrect.bottom > height:
        #irrelevant

    screen.fill(black)
    screen.blit(ball, ballrect)
    screen.blit(bar, barrect)
    pygame.display.flip()

除了"如果'w'被按下"部分之外,它工作正常:它应该做的是填充黑色,显示"game_over"图像两秒钟并继续工作。取而代之的是,它会将所有内容冻结两秒钟并继续工作,就像以下行从未存在过一样。

screen.fill(black)
screen.blit(over, overrect)
pygame.display.flip()

你能说出我做错了什么吗?

当游戏重新启动时,杆的位置(barrect),球的位置(ballrect)和速度(speed)必须设置为初始状态:

创建一个初始化游戏状态的函数:

def InitGame():
    global ballrect, barrect, speed
    speed = [2, 2]
    ballrect = ball.get_rect()
    barrect = bar.get_rect(center=(320,475))  

启动时调用一次:

screen = pygame.display.set_mode(size)
ball = pygame.image.load("intro_ball.gif")
bar = pygame.image.load("bar_low.gif")
over = pygame.image.load("game_over.gif")
overrect = over.get_rect(center=(width/2, height/2 ))
InitGame();

当游戏必须重新启动时,再次调用它。我建议不要耽误游戏 pygame.time.delay() .计算必须重新启动游戏的时间 starttime .根据时间绘制游戏屏幕或"游戏结束"屏幕:

starttime = 0
while 1:
    for event in pygame.event.get():
        if event.type == pygame.QUIT: sys.exit()
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_w:
                # reset game and init the new start time
                InitGame()
                starttime = pygame.time.get_ticks() + 2000
    if pygame.time.get_ticks() > starttime: 
        keys = pygame.key.get_pressed()
        # [...]
        screen.fill(black)
        screen.blit(ball, ballrect)
        screen.blit(bar, barrect)
    else:
        screen.fill(black)
        screen.blit(over, overrect)
    pygame.display.flip()

最新更新