我试图在按下一个键时移动一个精灵。我可以使用 on_key_press() 和 on_key_release() 来做到这一点,但是我遇到了在按住左键的同时向右移动的问题,反之亦然。我想使用密钥轮询并从 pyglet 文档中找到它。
from pyglet.window import key
window = pyglet.window.Window()
keys = key.KeyStateHandler()
window.push_handlers(keys)
# Check if the spacebar is currently pressed:
if keys[key.SPACE]:
pass
我似乎无法在 cocos2d 中实现这一点。下面是一个简单的例子。它打印“按键!” 很好,但如果我能让它打印“空间!” 反复按下空格键时,它会解决我的问题。
from cocos.director import director
from cocos.layer import *
from cocos.scene import Scene
from pyglet.window import key
from pyglet.window.key import KeyStateHandler
class MyLayer(Layer):
is_event_handler = True
def __init__(self):
super(MyLayer, self).__init__()
self.keys = KeyStateHandler()
director.window.push_handlers(self.keys)
def on_key_press(self, symbol, modifiers):
print('Key press!')
if self.keys[key.SPACE]:
print('Space!')
def main():
director.init(resizable=False, width=1024, height=786)
title_scene = Scene(MyLayer())
director.run(title_scene)
if __name__ == '__main__':
main()
为了完整起见,这里是我的 on_key_press()、on_key_release() 代码。问题是如果我按下右,按下左,释放左我的精灵将停止,因为 on_key_release() 将 x 速度设置为零。但是,我仍然按下右,所以我想在按下并释放左后继续移动那个方向。
def on_key_press(self, symbol, modifiers):
if symbol == key.LEFT:
self.player1.velocity = (-self.player1.speed, self.player1.velocity[1])
if symbol == key.RIGHT:
self.player1.velocity = (self.player1.speed, self.player1.velocity[1])
def on_key_release(self, symbol, modifiers):
if symbol == key.LEFT:
self.player1.velocity = (0, self.player1.velocity[1])
if symbol == key.RIGHT:
self.player1.velocity = (0, self.player1.velocity[1])