2 回答
![?](http://img1.sycdn.imooc.com/545847aa0001063202200220-100-100.jpg)
TA贡献1828条经验 获得超13个赞
您确实需要用于检查事件循环中的键的代码。
你说当你修复游戏变得无法玩,因为你不得不反复敲击键,因为按住键没有任何作用。按键被按下是一个事件,它只在按键被按下时发生。当一个键被释放时,你也会得到一个事件,但是当它被按住时没有生成任何事件。但是,有一些方法可以解决这个问题。
以下是解决该问题的一些方法:
我喜欢重复键的方法,这就是我将首先介绍它的原因。
你可以告诉 pygame 你希望它在按键被按下时重复给你按键事件。这类似于许多系统在按下某个键时所做的事情。您可以通过告诉 pygame 您希望它在按住键时定期为您提供 KEYDOWN 事件来获得它。您使用命令pygame.key.set_repeat(delay, interval)
(此处为文档)。基本上,pygame 会在按下某个键时为您伪造 KEYDOWN 事件。是delay
在发送第一个重复键事件之前需要按住一个键的时间,以及interval
您希望在初始延迟后重复该事件的频率。
你也可以用另一种方式来做。您无需在按键被按下时做出反应,而是跟踪您希望游戏做出反应的按键状态。当您获得KEYDOWN
这些键之一的事件时,您会设置一个状态变量,指示该键已被按下。当您获得该键的相应KEYUP
事件时,您将清除该变量。然后在事件循环之外,只要按住键并设置状态,您就可以对这些键状态变量做出反应以使事情发生。
还有一种方法,您可以使用 询问 pygame 当前按下的键是什么pygame.key.get_pressed()
。然后从返回中解析出当前按下的键。请在此处查看文档。
如果您使用,get_pressed()
您仍然需要一个事件循环来处理事件,否则 pygame 将不会处理事件并且您的游戏将无响应。您也可以使用它pygame.event.pump()
来防止这种停顿。
![?](http://img1.sycdn.imooc.com/533e4c9c0001975102200220-100-100.jpg)
TA贡献1765条经验 获得超5个赞
event
对于第一个 for 循环是局部的。循环结束后将event
超出范围。 if event.type == pygame.KEYDOWN and event.key == pygame.K_UP and igralec.y > 10: igralec.y -= 5
在 for 循环之外,这是此错误的原因。
添加回答
举报