stopAllActions有效但stopActionByTag什么都不做

时间:2011-12-01 20:03:24

标签: cocos2d-iphone

我有一个标记为20的CCRepeatForever动作。我称之为:

  [player stopActionByTag:20];

注意到了。

我称之为:

  [player stopAllActions];

停止。任何的想法?动作是这样创建的并运行良好:

 CCRepeatForever *repeat=[CCRepeatForever actionWithAction:animate];
 repeat.tag=20;

 [player runAction:repeat];

更新:我还尝试设置animate.tag=21并自行停止该操作,或者除了repeat操作之外还停止该操作,但两者均无效。

1 个答案:

答案 0 :(得分:3)

这应该可行,我使用CCRepeatForever使用stopActionWithTag进行了快速测试,并且它正确地停止了。

我只能想象两种不起作用的情况:

  1. 在同一个对象上运行tag = 20时,您有多个操作。
  2. 您发送runAction的对象与发送stopActionByTag的对象不同。
  3. 前者很容易检查。如果此代码修复了您的问题,那么您将在播放器对象上运行具有相同标记的多个操作:

    while ([player getActionByTag:20]) {
        [player stopActionByTag:20];
    };
    

    后者不太可能,但可能。找出的一种方法是在runAction行上设置断点并记下播放器变量的地址。然后在stopActionByTag行设置另一个断点,并将该玩家的地址与前一个地址进行比较。如果它们不相同,那就是问题。