Python pygame.event.get_pressed()未更新
我有一个程序,画一个缩小的绿色圆圈,当你按p键时,圆圈消失,出现一条红线。但当我再次按下p键时,绿色圆圈应该会重新出现,但它不会Python pygame.event.get_pressed()未更新,python,pygame,Python,Pygame,我有一个程序,画一个缩小的绿色圆圈,当你按p键时,圆圈消失,出现一条红线。但当我再次按下p键时,绿色圆圈应该会重新出现,但它不会 每当我在第一次按p之后调用pygame.event.get_pressed()函数时,它总是返回相同的值。我是否必须使用某种键盘重置来重新正确读取get\u pressed()方法 这是我的密码: import pygame import time BLACK = (0,0,0) WHITE = (255,255,255) GREEN = (0,255,0) RED
每当我在第一次按p之后调用
pygame.event.get_pressed()
函数时,它总是返回相同的值。我是否必须使用某种键盘重置来重新正确读取get\u pressed()
方法
这是我的密码:
import pygame
import time
BLACK = (0,0,0)
WHITE = (255,255,255)
GREEN = (0,255,0)
RED = (255,0,0)
pygame.init()
size = (700,700)
screen = pygame.display.set_mode(size)
screennumber = 1
pygame.display.set_caption("Game Test")
running = True
width = 350
clock = pygame.time.Clock()
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
screen.fill(BLACK)
pressed = pygame.key.get_pressed()
print(pressed)
if pressed[pygame.K_p]:
screennumber = 2
else:
screennumber = 1
if screennumber == 1:
pygame.draw.circle(screen,GREEN,[350,350], width,1)
pygame.display.flip()
if width>1:
width = width-1
if screennumber == 2:
time.sleep(0.25)
pause = True
while pause:
pressed = pygame.key.get_pressed()
print(pressed)
if pressed[pygame.K_r]:
pause = False
pygame.draw.line(screen,RED,[0,0],[700,700],5)
pygame.display.flip()
clock.tick(21)
pygame.display.flip()
clock.tick(21)
pygame.quit()
谢谢
pygame.key.get_pressed()
调用其中一个事件函数时更新。将pygame.event.pump()
放入您的中,同时暂停:
循环,它将正常工作pygame.event.pump()
告诉pygame您不想使用事件,但它应该处理内部操作
但当前,当红线出现时,您的程序不会响应任何事件(您甚至无法关闭窗口),因此我建议在暂停时在中设置一个事件循环:
阻止检查pygame.QUIT
事件
此外,如果您不定期调用其中一个事件函数,操作系统会认为您的程序已崩溃。使用
pygame.key.get\u pressed
不是实时处理按键的可靠方法。函数返回一个字典,其中包含函数调用时键盘的状态。但是,如果在两次通话之间按下并释放某个键,字典将与根本没有按下该键一样。
检查用户是否按键的更好方法是在事件循环中处理pygame.KEYDOWN
事件。然后检查KEYDOWN
是否为所需的钥匙
以下是您的程序版本,分为三个部分:1)处理事件,2)更新游戏元素,3)绘制到屏幕
import pygame
import time
BLACK = (0,0,0)
WHITE = (255,255,255)
GREEN = (0,255,0)
RED = (255,0,0)
pygame.init()
size = (700,700)
screen = pygame.display.set_mode(size)
pygame.display.set_caption("Game Test")
running = True
width = 350
paused = False
clock = pygame.time.Clock()
while running:
# process all events
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# -- HERE IS THE RELEVANT SECTION --
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_p:
paused = not(paused)
# update everything
if not paused:
if width > 1:
width = width-1
# draw everything
screen.fill(BLACK)
if not paused:
pygame.draw.circle(screen,GREEN,[350,350], width,1)
else:
pygame.draw.line(screen,RED,[0,0],[700,700],5)
pygame.display.flip()
# update the clock
clock.tick(21)
pygame.quit()
如果您对此代码有任何疑问,请告诉我 是否应该在块调用
pygame.event.get()
后缩进其余代码(退出除外)?我猜在读取新事件之前,pygame.key.get_pressed()
不会更新。pygame.event.get_pressed
获取函数调用时键盘的状态。它对于检查用户是否在最后一帧内按下某个键没有用处,因为自上次调用以来按下和释放的键的状态仍然是False
。相反,OP应该处理事件循环中所有必要的事件。是的,通常最好使用中所述的事件循环。