gpt4 book ai didi

Python pygame.event.get_pressed() 不更新

转载 作者:太空宇宙 更新时间:2023-11-03 15:40:51 25 4
gpt4 key购买 nike

我有一个程序可以绘制一个收缩的绿色圆圈,当您按p时,圆圈消失并出现一条红线。但是当我再次按 p 时,绿色圆圈应该重新出现,但事实并非如此。

每当我第一次按 p 后调用 pygame.event.get_pressed() 函数时,它总是返回相同的值。我是否必须使用某种键盘重置才能使 get_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.KEYDOWN 事件。然后检查KEYDOWN是否是您想要的 key 。

这是您的程序版本,分为三个部分: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()

如果您对此代码有任何疑问,请告诉我。

关于Python pygame.event.get_pressed() 不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42151465/

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