按下键时 Pygame 不会闪烁图像

问题描述

所以,我正在尝试制作一个游戏,我正在研究基础知识,我试图弄清楚为什么当我按下 0 键时,它会打印“a”,但是画面没有变化。按下一个也是一样。

import pygame
from pygame.display import mode_ok

pygame.init()
size = width,height = 1000,800
speed = [2,2]
black = 1,2,0
screen = pygame.display.set_mode(size)
mode_ok(size,flags=1,depth=5,display=0)
disPLAYSURF = pygame.display.set_mode((0,0),pygame.FULLSCREEN)

pygame.display.set_caption('Game')
# image database
pic = pygame.image.load(r"intro_ball.gif")
pic2 = pygame.image.load("poeple.png")
pic3 = pygame.image.load("frame_04_delay-0.1s.gif")
pic4 = pygame.image.load("frame_17_delay-0.1s.gif")
screen.blit(pygame.transform.scale(pic,(1000,800)),(0,0))
screen.blit(pic2,(500,400))
pygame.display.flip()


while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_0:
                screen.blit(pic3,0))
                print("a")
            if event.key == pygame.K_1:
                screen.blit(pygame.transform.scale(pic4,0))
                print("B")
    pygame.event.pump()


如果有人可以提供帮助,将不胜感激。

解决方法

事件循环仅在事件发生时运行一次。在事件循环中绘制图像时,它仅在短时间内可见。如果要永久绘制图片,则需要在应用程序循环中绘制。
将当前图片设置为 current_pic 变量。事件发生时更改变量。在应用循环中不断绘制current_pic变量所指示的图片:

current_pic = pygame.transform.scale(pic,(1000,800))

clock = pygame.time.Clock()
run = True
while True:
    clock.tick(60)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_0:
                current_pic = pic3
                print("a")
            if event.key == pygame.K_1:
                current_pic = pygame.transform.scale(pic4,800))
                print("B")
    
    screen.blit(current_pic,(0,0))
    screen.blit(pic2,(500,400))
    pygame.display.flip()

pygame.quit()

典型的 PyGame 应用程序循环必须: