擅长:python、mysql、java
<p>似乎您误解了事件队列和事件循环的工作方式。{1>当事件添加到队列时,按一个键。调用<code>pygame.event.get</code>会清空事件队列并将所有事件放入一个列表中,您可以使用for循环进行迭代:<code>for event in pygame.event.get():</code>。这意味着pygame不知道你还拿着钥匙,它只会看到你按了一次。它还将注意到您释放了密钥并向队列添加了一个<code>pygame.KEYUP</code>事件。在</p>
<p>在您的例子中,当您按下UP键时,<code>yChange</code>变量将减少为<code>-10</code>。在while循环中,<code>mainCharY</code>将被每帧递减<code>-10</code>,字符将向上移动。一旦您释放该键,<code>yChange</code>将重置为<code>0</code>,玩家角色停止。在</p>
<pre><code>if event.type == pygame.KEYUP:
if event.key == pygame.K_UP:
yChange = 0
</code></pre>
<hr/>
<p>为了在游戏中实现跳跃,你应该在每一帧的y速度上加上一个重力常数来加速。当角色接触地面时,将y速度设置为0,并将变量(<code>on_ground</code>或类似的)设置为<code>True</code>,这样你就知道玩家可以跳跃了。当玩家按下跳跃键时,你可以将y速度设置为负值,精灵将开始向上移动,直到重力再次将他拉下来。这是一个<a href="https://stackoverflow.com/a/47858300/6220679">complete example</a>。在</p>