python - pygame 键检测未检测到按键
问题描述
我试图让 pygame 检测我的按键并将背景更改为随机颜色,但每次按下所选键时,都没有任何变化。窗口的背景颜色保持不变。
import pygame
import random
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
detect=True
keys=pygame.key.get_pressed()
while detect:
pygame.event.pump()
keys = pygame.key.get_pressed()
if keys[pygame.K_0]:
screen.fill((random.randint(0, 255)), (random.randint(0, 255)), (random.randint(0, 255)))
pygame.display.update()
if keys[pygame.K_1]:
screen.fill((random.randint(0, 255)), (random.randint(0, 255)), (random.randint(0, 255)))
pygame.display.update()
解决方案
这里的问题是程序永远不会到达代码的后半部分。
第一个while True
语句,它对屏幕没有任何作用,而是等待用户关闭窗口一直运行 - 应该检测按键的代码仅在接收到pygame.QUIT
事件时执行(然后窗口关闭)。
程序的工作方式,它们运行一个循环,其中包含所有语句 -while
循环不会并行运行 - 你必须这样做:
import pygame
import random
running = True
screen = pygame.display.set_mode((800, 600))
while running:
pygame.event.pump()
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
keys = pygame.key.get_pressed()
if keys[pygame.K_0]:
screen.fill((random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)))
pygame.display.update()
if keys[pygame.K_1]:
screen.fill((random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)))
pygame.display.update()
pygame.time.delay(30)
pygame.quit()
(还要注意对“pygame.time.delay”的调用,否则 while 循环将使用所有 CPU 资源运行,试图以比它们到达的速度更快的速度获取事件,并且对此无能为力 - 您的简单示例将以 100% 的速度烧毁中央处理器)
推荐阅读
- python - “NoneType”对象没有属性“运行”张量流
- javascript - 使用 Fabric js 调整高清图像大小
- python - 使用 for 循环删除数据帧行
- attributes - header.php wordpress 中隐藏的混合内容
- powershell - 如何使用 powershell 和 Orchestrator 2016 连接到 microsoftTeams?
- node.js - 使用 mongoose 将对象附加到 mongoDB 中的对象数组
- visual-studio-code - 自动完成插件 Visual Studio Code 以灰色插入字符串
- python - 没有这样的表:accounts_demandplan
- swift - 如何获取导航控制器的父序列的引用?
- laravel - Docker 获取 dpkg:安装 ubuntu 映像时出现不可恢复的致命错误