如何在cocos2d中停止一个动作?

1 投票
1 回答
2705 浏览
提问于 2025-04-17 16:58

我之前有一些使用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编程上还是个菜鸟,所以自己搞不定。

提前谢谢你们。

1 个回答

2

我之前没有用过cocos2d的Python版本(只用过cocos2d-iphone),所以不能告诉你有没有更好的方法来解决这个问题。不过,根据你的具体情况,有两种方法可以实现你想要的效果。

如果你只是想在on_key_release()里停止精灵上的所有动作,你只需要对精灵对象调用stop(),这样就会停止所有动作。如果你唯一的动作是移动动画,这样做就足够了。

例如,你可以这样写:

def on_key_release(self, symbol, modifiers):
    if symbol == 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

撰写回答