是否可以在cocos2d-x中同步动作?

时间:2013-11-26 16:09:13

标签: c++ callback action cocos2d-x

我需要在cocos2d-x中的节点集合上运行操作,然后在所有这些操作完成时运行回调。

EG。我有20个对象,我希望它们缩放到定义的值,当所有这些操作完成后,我想在屏幕上更新另一个对象(让我们称之为球)。

我尝试在球上附加运行动作,然后在固定延迟之前考虑到之前列表中最长动作的总执行时间。即使这种方法工作得相当好,有时延迟动作也会在第一个列表中的最后一个对象完成它自己之前运行。此外,这些动作中的每一个的执行时间可能会不时变化,因此固定延迟将是最坏情况下的猜测值。在我看来,不太好。

cocos2d-x中有没有办法使用提供的API本地实现这一点?

1 个答案:

答案 0 :(得分:0)

我会这样做(在objc中,希望c ++ sdk具有类似的功能):

    _animComletes = 0;                // must be an iVar
    _maxBalls     = [_nodes count];   // nust be an iVar

    for (CCNode *nn in _nodes) {
        id oneObject = [CCSequence actions:
                [CCScaleTo actionWithDuration:.25 scale:.35],
                [CCCallBlock actionWithBlock:^{
                    _animCompletes++;
                    if (_animCompletes == _maxBalls) {
                        [self scheduleOnce:@selector(updateBall) delay:0];
                    }

                }], nil];
        [nn runAction:oneObject];
    }

-(void) updateBall {
    _animCompletes = 0;
    _maxBalls = 0;
    // do your thing 
}