1

我有一些使用 Cocos2-x 的经验,但现在我正在尝试使用 Python 中的原始 cocos2d 开发原型,我发现它非常不同。问题是我在图层上有一个精灵

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

    def __init__(self):
        super(TestLayer, self).__init__()
        self.sprite = cocos.sprite.Sprite('grossini.png')
        self.sprite.position = 320, 340
        self.add(sprite)

我可以移动它:

def on_key_press(self, symbol, modifiers):
    if symbol ==key.RIGHT:
    move = MoveBy((1, 0), 0.1)
    repeat = Repeat(move)
    self.sprite.do(repeat)

但我不知道如何在on_key_release方法上阻止它。(在 Cocos2d-x 中我可以做到this->sprite->stopAction(action).

另外我想知道是否有更好的方法(cocos2d Python 方法)通过用户输入移动和停止精灵。

我已经阅读了文档和一些游戏示例,但我在 Python 上编程非常n00b,所以我无法为自己弄清楚这一点。

提前致谢。

4

1 回答 1

2

我从未将 cocos2d 用于 python(仅 cocos2d-iphone),所以我无法回答您的问题,即是否有更好的方法来做到这一点。但是根据您的具体情况,有两种方法可以满足您的要求。

如果您只是想删除精灵上的所有on_key_release()动作,您需要做的就是调用stop()将删除所有动作的精灵对象。因此,如果您唯一的动作是移动动画,这应该足够了。

def on_key_release(self, symbol, modifiers): if symbol == key.RIGHT: self.sprite.stop()

但是,如果您只想停止 sprite 上的特定动作,并且希望保持其他动作运行。然后你需要将动作保存在某处,然后调用stop()动作而不是精灵。一个例子可能是这样的:

def __init__(self):
    super(TestLayer, self).__init__()
    self.sprite = cocos.sprite.Sprite('grossini.png')
    self.sprite.position = 320, 340
    self.add(sprite)
    self.sprite_move_action = None

def on_key_press(self, symbol, modifiers):
    if symbol ==key.RIGHT:
        move = MoveBy((1, 0), 0.1)
        repeat = Repeat(move)
        self.sprite_move_action = repeat
        self.sprite.do(repeat)

def on_key_release(self, symbol, modifiers):
    if symbol == key.RIGHT and self.sprite_move_action is not None:
        self.sprite.remove_action(self.sprite_move_action)
        self.sprite_move_action = None
于 2013-02-24T23:54:02.613 回答