如何在cocos2d中停止操作?

时间:2013-02-24 21:45:30

标签: python cocos2d-iphone

我有一些使用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编程,所以我不能为自己弄清楚这一点。

提前致谢。

1 个答案:

答案 0 :(得分:2)

我从来没有使用cocos2d用于python(只有cocos2d-iphone)所以我无法回答你的问题,如果有更好的方法可以做到这一点。但是,根据您的具体情况,有两种方法可以根据您的要求进行操作。

如果您只想在on_key_release()中删除精灵上的所有操作,您只需要在精灵对象上调用stop()即可删除所有操作。因此,如果您的唯一动作是移动动画,那就足够了。

def on_key_release(self,symbol,modifiers):        如果符号== key.RIGHT:            self.sprite.stop()

但是,如果您只想停止对精灵的特定操作,并且希望保持其他操作正在运行。然后你需要在某处保存动作,然后在动作上调用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