2013-02-22 73 views
1

第二個問題在這裏,我的第一個是答案,真的幫助,所以我會再試一次。鍵盤事件上的coco2d(python)和pyglet

這裏是代碼和解釋:

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) 

因此,這裏是我的問題。當按下SPACE或RIGHT時,它不會執行操作。我打印的值和鍵[key.spACE]返回False,即使我按下這些按鈕。我錯過了什麼?也許有些push_handlers?我不知道如何使用它。

預先感謝。

回答

0

是的,您需要在KeyStateHandler上使用push_handlers,以便它被更新。我自己並沒有使用cocos2d,只有pyglet,所以這可能不是最好的或正確的方法,但它應該讓你去。

if __name__ == '__main__': 
    cocos.director.director.init() 
    cocos.director.director.window.push_handlers(keys) 
    # Create layer, run, etc. 

Here is the page上pyglet文檔中使用KeyStateHandler。在pyglet中,您自己創建窗口並將其附加在那裏,但在cocos2d中,窗口由導演處理。

我還在cocos2d文檔中找到了this page,這可能是也可能不是用cocos2d處理按鍵的正確方法。