Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pygame仅在按键时循环_Python_Python 3.x_Pygame_Game Engine - Fatal编程技术网

Python Pygame仅在按键时循环

Python Pygame仅在按键时循环,python,python-3.x,pygame,game-engine,Python,Python 3.x,Pygame,Game Engine,我将预先声明,这与以下问题几乎完全相同: 我想用pygame和PygCourse做一个基于回合的地牢爬行。我已经制作了一个基本的模板,如果我让主while循环以特定的fps运行,它就可以工作。在我看来,以这种方式实际实施它似乎是荒谬的 只要让while循环在按键上迭代就不那么复杂了,因为实际上输入之间什么都没有发生。如果有人想在15分钟内考虑下一步,为什么要让主循环重复一百万次 我在pygcurse.waitforkeypress()和pygame.event.wait()上尝试了各种变体。我可

我将预先声明,这与以下问题几乎完全相同:

我想用pygame和PygCourse做一个基于回合的地牢爬行。我已经制作了一个基本的模板,如果我让主while循环以特定的fps运行,它就可以工作。在我看来,以这种方式实际实施它似乎是荒谬的

只要让while循环在按键上迭代就不那么复杂了,因为实际上输入之间什么都没有发生。如果有人想在15分钟内考虑下一步,为什么要让主循环重复一百万次

我在pygcurse.waitforkeypress()和pygame.event.wait()上尝试了各种变体。我可以让循环等待按键,但按键似乎没有进入队列,因此角色不再移动(我知道它在每个按键上只循环一次,尽管没有移动,因为我为了调试目的在其中放置了一个计数器)


有没有一种明显的内在方式可以做到这一点,或者这只是一种非常过时的思考游戏设计的方式?

您提到的问题实际上包含了您所需要的大部分内容。只需根据需要筛选事件,然后使用event.wait阻止执行,直到新事件进入队列。确保窗口有焦点,否则它不会捕捉到按键

import pygame

pygame.init()
screen = pygame.display.set_mode((400,400))

pygame.event.set_allowed(None)
pygame.event.set_allowed([pygame.QUIT, pygame.KEYDOWN])

while True:
    e = pygame.event.wait()
    print e
这对你的游戏设计来说是非常有限的。动画需要连续执行,在用户计划移动时,阻塞直到输入只允许完全静态的图形。即使在用户移动之前游戏没有“反应”,你最终也会想要一些“休息/等待”的动画来保持游戏在视觉上的趣味性

此外,如果游戏中有某种类型的动画对输入作出反应,则需要包括循环来控制动画,如果希望用户不必等待动画完成后才能执行任何操作(包括关闭游戏),则需要在这些循环期间进行额外的输入检查。通常情况下,除非有非常有限的特殊情况,否则通过连续的游戏循环和每次轮询输入通常会更好