繁体   English   中英

Pyglet / Cocos2d,出现窗口,但精灵未生成

[英]Pyglet/Cocos2d, window appears but sprite doesn't spawn

我正在尝试创建一个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()

您的代码中有很多问题阻止了任何事情的发生:

  1. 您正在pyglet中创建一个cocos2d实体,而没有告诉pyglet如何处理它。 使用cocos2d进行窗口创建等操作可能会更好。

  2. 当您可能应该使用cocos2d时,您正在创建pyglet Sprite ,并且没有将其附加到Layer

  3. animate不是Layer API的一部分(即使它是,也可能不是静态方法)。

  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 )

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM