coco2d(python)和pyglet上的键盘事件
这里的第二个问题,我的第一个问题是答案,真的很有帮助,所以我会再试一次 以下是代码和说明:coco2d(python)和pyglet上的键盘事件,python,cocos2d-iphone,Python,Cocos2d Iphone,这里的第二个问题,我的第一个问题是答案,真的很有帮助,所以我会再试一次 以下是代码和说明: import cocos from cocos.actions import * import pyglet from pyglet.window import key from pyglet.window.key import KeyStateHandler from cocos.director import director keys = KeyStateHandler() class Sca
import cocos
from cocos.actions import *
import pyglet
from pyglet.window import key
from pyglet.window.key import KeyStateHandler
from cocos.director import director
keys = KeyStateHandler()
class ScaleTestLayer(cocos.layer.Layer):
is_event_handler = True
def __init__(self):
super( ScaleTestLayer, self ).__init__()
self.sprite = cocos.sprite.Sprite('grossini.png')
self.sprite.position = 320,240
self.drag = False
self.add(self.sprite)
self.rect = self.sprite.get_rect()
def on_mouse_release(self, x, y, buttons, modifiers):
if self.rect.contains(x, y) == True:
if self.drag == False:
scale = ScaleBy(5, duration=1)
if buttons == pyglet.window.mouse.LEFT:
self.sprite.do(scale)
if buttons == pyglet.window.mouse.MIDDLE:
rotate = RotateBy(180, 1)
self.sprite.do(rotate)
if buttons == pyglet.window.mouse.RIGHT:
scale = (Reverse(scale))
self.sprite.do(scale)
else:
self.drag = False
def on_mouse_drag(self, x, y, dx, dy, buttons, modifiers):
if self.rect.contains(x, y):
self.drag = True
self.sprite.position = director.get_virtual_coordinates (x, y)
self.rect.center = self.sprite.position
def on_key_press(self, symbol, modifiers):
if keys[key.SPACE]:
jump = JumpBy((5,0), duration=0.5)
self.sprite.do(jump)
if keys[key.RIGHT]:
move = MoveBy((10,0), 0.5)
self.sprite.do(move)
if __name__ == "__main__":
cocos.director.director.init()
test_layer = ScaleTestLayer ()
main_scene = cocos.scene.Scene (test_layer)
cocos.director.director.run (main_scene)
这就是我的问题。当我按下空格键或右键时,它不会执行该操作。我打印了值,键[key.SPACE]返回False,即使我按了这些按钮。我错过了什么?也许是一些推手?我不知道如何使用它
事先谢谢。是的,您需要在
KeyStateHandler
上使用push\u处理程序,以便对其进行更新。我自己没有用过cocos2d,只有pyglet,所以这可能不是最好或正确的方法,但它应该会让你开始
if __name__ == '__main__':
cocos.director.director.init()
cocos.director.director.window.push_handlers(keys)
# Create layer, run, etc.
在pyglet文档中使用KeyStateHandler
。在pyglet中,您自己创建窗口并将其附加到那里,但在cocos2d中,窗口由控制器处理
我还在cocos2d文档中发现,这可能是,也可能不是,用cocos2d处理按键的正确方法