如何解决如何使用KEYDOWN?
当我取出 door() 线时,它起作用了;
while True:
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
print("key pressed")
if event.key == pygame.K_ESCAPE:
print("key pressed")
pygame.quit()
sys.exit()
#door()
这是命令提示符读数
C:\Users\Me\Documents\Fan game>python testing_file.py
pygame 2.0.1 (SDL 2.0.14,Python 3.9.5)
Hello from the pygame community. https://www.pygame.org/contribute.html
key pressed
key pressed
C:\Users\Me\Documents\Fan game>
但是一旦我重新添加该行,它就会停止工作。
我的门功能;
def door():
global var_door
image_door_1 = pygame.image.load(r'textures\door\frame_1.png')
image_door_2 = pygame.image.load(r'textures\door\frame_2.png')
image_door_3 = pygame.image.load(r'textures\door\frame_3.png')
image_door_4 = pygame.image.load(r'textures\door\frame_4.png')
image_door_5 = pygame.image.load(r'textures\door\frame_5.png')
image_door_6 = pygame.image.load(r'textures\door\frame_6.png')
image_door_1_size = image_door_1.get_rect().size
image_door_2_size = image_door_2.get_rect().size
image_door_3_size = image_door_3.get_rect().size
image_door_4_size = image_door_4.get_rect().size
image_door_5_size = image_door_5.get_rect().size
image_door_6_size = image_door_6.get_rect().size
centered_image_door_1 = [(display_size[0] - image_door_1_size[0])/2,(display_size[1] - image_door_1_size[1])/2]
centered_image_door_2 = [(display_size[0] - image_door_2_size[0])/2,(display_size[1] - image_door_2_size[1])/2]
centered_image_door_3 = [(display_size[0] - image_door_3_size[0])/2,(display_size[1] - image_door_3_size[1])/2]
centered_image_door_4 = [(display_size[0] - image_door_4_size[0])/2,(display_size[1] - image_door_4_size[1])/2]
centered_image_door_5 = [(display_size[0] - image_door_5_size[0])/2,(display_size[1] - image_door_5_size[1])/2]
centered_image_door_6 = [(display_size[0] - image_door_6_size[0])/2,(display_size[1] - image_door_6_size[1])/2]
mouse_down = False
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
elif event.type == MOUSEBUTTONDOWN:
mouse_down = True
x,y = pygame.mouse.get_pos()
if 0 < x < 253 and 0 < y < 226:
if mouse_down:
if var_door == 0:
screen.blit(image_door_1,centered_image_door_1)
pygame.display.update()
time.sleep(0.01)
screen.blit(image_door_2,centered_image_door_2)
pygame.display.update()
time.sleep(0.01)
screen.blit(image_door_3,centered_image_door_3)
pygame.display.update()
time.sleep(0.01)
screen.blit(image_door_4,centered_image_door_4)
pygame.display.update()
time.sleep(0.01)
screen.blit(image_door_5,centered_image_door_5)
pygame.display.update()
time.sleep(0.01)
screen.blit(image_door_6,centered_image_door_6)
pygame.display.update()
var_door = 1
else:
screen.blit(image_door_6,centered_image_door_6)
pygame.display.update()
time.sleep(0.01)
screen.blit(image_door_5,centered_image_door_5)
pygame.display.update()
time.sleep(0.01)
screen.blit(image_door_4,centered_image_door_4)
pygame.display.update()
time.sleep(0.01)
screen.blit(image_door_3,centered_image_door_3)
pygame.display.update()
time.sleep(0.01)
screen.blit(image_door_2,centered_image_door_2)
pygame.display.update()
time.sleep(0.01)
screen.blit(image_door_1,centered_image_door_1)
pygame.display.update()
var_door = 0
我不明白为什么它不起作用。我尝试重新排列 while 循环检查的顺序,但即使这样也不起作用。我的猜测是出于某种原因,它从不检查是否按下了退出键并卡在了门功能上,但门功能中没有任何循环。
解决方法
当您在 pygame.event.get()
内调用 door()
时,主循环中的事件队列将为空。
一种可能的解决方案是存储从 pygame.event.get()
返回的列表并在两个循环中使用它。
您正在查询偶数循环两次,这就是您丢失某些事件的原因。将您的主循环更改为:
while True:
mouse_down = False
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
print("key pressed")
if event.key == pygame.K_ESCAPE:
print("key pressed")
pygame.quit()
sys.exit()
elif event.type == MOUSEBUTTONDOWN:
mouse_down = True
door(mouse_down)
并将 def door()
更改为 def door(mouse_down)
,然后从 door()
函数中删除第二个事件循环
将 door() 函数 cose 放在 while 下方对齐的左侧。 当 python 工作时,door() 处于 while 循环下。告诉我它是否有效,或者请添加有关为什么在 while 循环中的 door() 和使用 door() 的详细信息。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。