0

我正在开发一个简单的 cocos2d 游戏,我想在其中CCSprite同时为两个 s 设置动画,为此我只需CCAction在各自的 `CCSprite' 上设置 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循环中=/

4

2 回答 2

1

如果我不从 cocos 的文档中挖掘出来,我会实现自己的观察者对象,观察一组动画是否完成。这将需要几个快速步骤:

  1. 创建自己的课程,例如PendingOperationsCounter
  2. 实例化对象PendingOperationsCounter
  3. 为此特定注册完成操作PendingOperationsCounter
  4. 注册每个开始动画到您的PendingOperationsCounter, 注册时增加挂起的操作计数器
  5. 当动画完成时,它会减少操作计数器
  6. 如果计数器再次为零,它会触发您注册的自己的完成动作

完毕!

于 2012-10-31T11:24:32.340 回答
0

首先使用 CCSequence 和 1) MoveTo 和 2) CallBlock,而不是先使用简单的 CCMoveTo。在第二个开始的调用块中,再次使用 CCSequence 来 1) moveTo 和 2) 调用选择器来做任何你想做的事情。它将在这个用例中工作。对于更通用的方法,请按照上述答案作为指导。

于 2012-10-31T14:12:28.573 回答