<p>正如@pjk和其他人所说,您确实需要代码来检查事件循环中的键</p>
<p>您在修复时说过,游戏变得无法玩,因为您必须反复按按键,因为按住按键没有任何作用。被按下的键是一个事件,只有在按下该键时才会发生。当释放一个键时,您也会得到一个事件,但在按住键时不会生成任何事件。然而,有办法解决这个问题</p>
<p><strong>以下是一些解决方法:</strong></p>
<p>我喜欢重复关键点的方法,这就是为什么我将首先介绍它</p>
<p>您可以告诉pygame,如果按下了键,您希望它重复给您下键事件。这类似于许多系统在按下键时所做的操作。您可以通过告诉pygame您希望它在按住键的同时定期给您提供KEYDOWN事件来获得它。您可以使用命令<code>pygame.key.set_repeat(delay, interval)</code>(docs<a href="https://www.pygame.org/docs/ref/key.html#pygame.key.get_repeat" rel="nofollow noreferrer">here</a>)。基本上,当你按下一把钥匙时,pygame会为你模拟按键事件。<code>delay</code>是在发送第一个重复键事件之前需要按住键多长时间,<code>interval</code>是希望在初始延迟后重复事件的频率</p>
<p>你也可以用另一种方法。当按键被按下时,你不是对按键做出反应,而是跟踪你想让游戏做出反应的按键的状态。当您获得其中一个键的<code>KEYDOWN</code>事件时,您设置了一个状态变量,指示该键已被按下。当您获得该键对应的<code>KEYUP</code>事件时,可以清除该变量。然后,在事件循环之外,您可以对这些键状态变量做出反应,只要保持键并设置状态,事情就会发生</p>
<p>还有一种方法,您可以使用<code>pygame.key.get_pressed()</code>询问pygame当前按下了哪些键。然后从返回中解析当前按下的键。见文件<a href="https://www.pygame.org/docs/ref/key.html#pygame.key.get_pressed" rel="nofollow noreferrer">here</a></p>
<p>如果您使用<code>get_pressed()</code>,您仍然需要一个事件循环来处理事件,否则pygame将不会处理事件,您的游戏将失去响应。您还可以使用<code>pygame.event.pump()</code>来防止此暂停</p>