函数pygame.key.get_pressed()根本不起作用



我正在尝试用pygame模块制作一个简单的游戏,为此,我需要知道每一帧都按下了什么按钮。为此,我使用了pygame.key.get_pressed((方法。但是我有问题,所以我创建了一个简单的测试程序来检查错误在哪里

import pygame
import time
pygame.init()
screen = pygame.display.set_mode((1400, 700))
pygame.event.pump()
pygame.draw.rect(screen, "white", (0, 0, 1400, 700), 0)
while True:
time.sleep(0.1)
pygame.draw.rect(screen, "white", (0, 0, 1400, 700), 0)
pressed = pygame.key.get_pressed()
if pressed[pygame.K_d]:
pygame.draw.rect(screen, "red", (0, 0, 1400, 700), 0)
pygame.display.update()
print("yes")
else:
pygame.draw.rect(screen, "white", (0, 0, 1400, 700), 0)
pygame.display.update()
print("no")

这意味着运行检查按钮状态的连续循环;d";按下时,将屏幕涂成红色,否则保持白色。然而,颜色根本没有改变,在运行了一些测试后,我发现pressed[pygame.K_d]总是0,而pressed只由零组成。我几乎尝试过这个网站和其他网站上建议的任何解决方案,但似乎都不起作用。我打开了pygame窗口,在检查时处于活动状态。感谢您提前抽出时间!

最简单的解决方案就是在while循环中添加对pygame.event.pump()的调用。get_pressed()不工作,因为pygame没有从事件系统获得任何更新,因为没有调用任何内容。

然而,在你的程序中还有一些其他奇怪的事情。这是一个新版本:

import pygame
pygame.init()
screen = pygame.display.set_mode((1400, 700))
clock = pygame.time.Clock()
while True:
screen.fill("white")
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
raise SystemExit

pressed = pygame.key.get_pressed()
if pressed[pygame.K_d]:
screen.fill("red")
print("yes")
else:
print("no")
pygame.display.update()
clock.tick(60) #FPS

此版本使用pygame.time.Clock对象来调节帧速率,并使用pygame事件队列来检测和响应有人点击您的窗口将其关闭(pygame.QUIT事件(。对pygame.event.get()的调用将pump()替换为对事件系统的调用。

我还用screen.fill替换了pygame.draw.rect调用,这意味着即使将来更改屏幕大小,颜色也会填充整个屏幕。

最新更新