等到不同CCSprites上的所有CCAction完成

时间:2012-10-31 10:47:13

标签: cocos2d-iphone ccaction

我正在开发一个简单的cocos2d游戏,其中我想同时为两个CCSprite设置动画,为此我只需在{CCSprite'上设置CCAction s,如下所示。

[first runAction:[CCMoveTo actionWithDuration:1 position:secondPosition]];
[second runAction:[CCMoveTo actionWithDuration:1 position:firstPosition]];

现在我想等到动画完成,所以我可以执行下一步。我应该如何等待完成这些动画?

实际上有两个方法调用,第一个通过上面的代码激活对象,第二个调用执行另一个动画。

我需要延迟第二个方法调用,直到第一个动画完成为止。 (我不想使用CCCallBlock块,因为我想从第一个调用者调用第二个方法。

修改

我试过了..

__block BOOL moving = YES;
[second runAction:[CCSequence actions:[CCMoveTo actionWithDuration:1 position:firstPosition], [CCCallBlockN actionWithBlock:^(CCNode *node){
            CCLOG(@"\n\n\n\n\n\n\n\nMovement Finished\n\n\n\n\n\n\n\n");
            moving = NO;
        }],nil]];
while(moving);

CCCallBlock从未被调用,因此永远陷入while loop = /

2 个答案:

答案 0 :(得分:1)

如果我不想从cocos的文档中挖掘它,我会实现自己的观察者对象,观察一组动画是否已经完成。它只需要很少的快速步骤:

  1. 创建自己的类,如PendingOperationsCounter
  2. 实例化PendingOperationsCounter
  3. 的对象
  4. 为此特定PendingOperationsCounter
  5. 注册完成操作
  6. 在注册增加待处理操作计数器
  7. 时,将每个开始动画注册到PendingOperationsCounter
  8. 当动画完成时,它会减少操作计数器
  9. 如果计数器再次为零,则会触发您已注册的自己的完成操作
  10. 完成!

答案 1 :(得分:0)

首先使用CCSequence而不是简单的CCMoveTo,1)使用MoveTo,2)使用CallBlock开始第二个。在要启动第二个的调用块中,再次使用CCSequence 1)moveTo,以及2)调用选择器来执行您想要执行的任何操作。它将在这个用例中起作用。有关更通用的方法,请按照上述答案作为指导。