我一直在尝试使用一些库中的“键释放”函数,比如pynput等等,但是我遇到了一个问题,如果我尝试将它们与一个名为pyglet的库一起使用,这是一个基于窗口的应用程序库,它不会让我这样做,程序就会崩溃
我想知道是否有任何方法可以在没有库的情况下检测密钥释放
注:我试过使用pyglet的on_key_release
函数,但对我来说是个bug,即使我为它写了一些东西,在密钥发布时,它通常也不会这样做。我已经检查了我的代码一千次,这对我来说不是一个问题
Pressing = False # var to indicate when the user is doing a long press and when he is not
@window.event
def on_key_release(symbol, modifiers):
global Pressing
if((symbol == key.A) | (symbol == key.S) | (symbol == key.W) | (symbol == key.D)):
Pressing = False
pass
这段代码会导致我的玩家在我开始移动他之后冻结,即使我什么都不做,只会把整个键释放空。真奇怪
因此,您的问题很可能是您正在执行
Pressing = False
,如果任何键被释放。当您释放任何键时,由于Pressing
正在False
而强制您的播放器对象冻结为了解决这个问题,您应该将键的状态存储在一个变量中(我称之为
self.keys
),并且在您渲染东西之前,更新/检查键并相应地更新您的player对象下面是一个在播放器对象上移动的工作示例(本例中为红色方块):
我已经离开了
@window.event
,因为复制粘贴这个类/继承的例子对我来说比较容易,因为我已经把它放在这里了。但你可以用任何你想用的逻辑。只要确保你没有定义一个固态的按下或不按下,检查个别关键点,并相应地更新之前,你渲染相关问题 更多 >
编程相关推荐