我正在尝试创建一个sprite类和一个用于移动sprite的键句柄,但它似乎不起作用。执行时,窗口会出现,但精灵不会出现。怎么了?
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 :(得分:0)
您的代码中存在许多阻止任何事情发生的问题:
你在pyglet中创建一个cocos2d实体,而不告诉pyglet如何处理它。你可能最好使用cocos2d来创建窗口等等。
当你应该使用cocos2d时,你正在创建一个pyglet Sprite
,并且你没有将它附加到Layer
。
animate
不是Layer
的API的一部分(即使它是,它可能不是静态方法)。
您尚未将Player
定义为事件处理程序,因此on_key_press
等不会执行任何操作。
您将更多参数传递到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 )