2014-01-23 70 views
0

我想創建一個精靈類和一個關鍵句柄來移動精靈,但它似乎並沒有工作。當執行時窗口會出現,但精靈不會。它出什麼問題了?Pyglet/Cocos2d,窗口出現,但精靈不會產生

import pyglet 
import cocos 
from pyglet.window import key 

window = pyglet.window.Window() 
keyboard = key.KeyStateHandler() 

class Player(cocos.layer.Layer): 

    def __init__(self): 
    super(Player, self).__init__() 

    img = pyglet.image.load('../game/resources/sprite_1.png') 
    self.sprite = pyglet.sprite.Sprite(img) 

    def animate(dt, velocity, sprite): 
    sprite.position += dt * velocity 

    def on_key_press(self, symbol, keyboard, modifiers): 
    if symbol == key.RIGHT: 
     self.img.x += dt * 10 
    elif symbol == key.LEFT: 
     self.img.x -= dt * 10 
    elif symbol == key.UP: 
     self.img.y += dt * 10 
    elif symbol == key.DOWN: 
     self.img.y -= dt * 10 



    def on_key_release(self, smybol, keyboard, modifiers): 
    if symbol == key.RIGHT: 
     self.sprite.x = dt * 0 
    elif symbol == key.LEFT: 
     self.sprite.x = dt * 0 
    elif symbol == key.DOWN: 
     self.sprite.y = dt * 0 
    elif symbol == key.UP: 
     self.sprite.y = dt * 0 


pyglet.gl.glEnable(pyglet.gl.GL_BLEND) 
pyglet.gl.glBlendFunc(pyglet.gl.GL_SRC_ALPHA, pyglet.gl.GL_ONE_MINUS_SRC_ALPHA) 

pyglet.app.run() 

回答

0

有在你的代碼相當多的問題,這是防止任何事情的發生:

  1. 你正在創建pyglet內的cocos2d的實體,沒有告訴pyglet如何處理它。你可能最好使用cocos2d中的東西像窗口創建等

  2. 你正在創建一個pyglet Sprite當你或許應該使用是Cocos2d之一,你不將其連接到Layer

  3. animate不是API的一部分Layer(即使它是,它可能不是一個靜態方法)。

  4. 您還沒有定義Player作爲事件處理程序,所以on_key_press等將不會做任何事情。 。

  5. 你傳遞更多參數到on_key_press比等要求,並沒有傳遞給它的是引用dt

這裏是您的示例代碼修改後的版本應該幫助你前進:

import cocos 
import pyglet 
from pyglet.window import key 

keyboard = key.KeyStateHandler() 

class Player(cocos.layer.Layer): 
    is_event_handler = True 

    def __init__(self): 
     super(Player, self).__init__() 
     img = pyglet.image.load('../game/resources/sprite_1.png') 
     self.sprite = cocos.sprite.Sprite(img) 
     self.add(self.sprite) 

    def on_key_press(self, symbol, modifiers): 
     print 'pressing' 
     if symbol == key.RIGHT: 
      self.sprite.x += 10 
     elif symbol == key.LEFT: 
      self.sprite.x -= 10 
     elif symbol == key.UP: 
      self.sprite.y += 10 
     elif symbol == key.DOWN: 
      self.sprite.y -= 10 

if __name__ == '__main__': 
    cocos.director.director.init() 

    player = Player() 
    main_scene = cocos.scene.Scene(player) 

    cocos.director.director.run(main_scene)