gpt4 book ai didi

python - Pygame 填充和 blit 不编辑屏幕

转载 作者:行者123 更新时间:2023-11-28 18:59:32 26 4
gpt4 key购买 nike

我正在熟悉 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()

除了“if 'w' is pressed”部分它工作正常:它应该做的是填充黑色,显示“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()

关于python - Pygame 填充和 blit 不编辑屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54261272/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com