/ / ¿Es posible sincronizar acciones en cocos2d-x? - c ++, callback, acción, cocos2d-x

¿Es posible sincronizar acciones en cocos2d-x? - c ++, callback, acción, cocos2d-x

Necesito ejecutar una acción en una colección de nodos en cocos2d-x, y luego ejecutar una devolución de llamada cuando todas esas acciones completan

P.ej. Tengo 20 objetos, quiero escalarlos a un valor definido, y cuando todas estas acciones se completen, quiero actualizar otro objeto (llamémoslo bola) en la pantalla.

Intenté unir la acción en la pelota.anteponiendo un retraso fijo que debe tener en cuenta el tiempo total de ejecución de la acción más larga de la lista anterior. Incluso si este enfoque funciona bastante bien, a veces la acción demorada se ejecuta antes de que el último objeto de la primera lista complete su propia. Además, el tiempo de ejecución de cada una de esas acciones podría variar de vez en cuando, por lo que el retraso fijo sería un valor estimado para el peor de los casos. No tan bien, en mi opinión.

¿Hay alguna manera en cocos2d-x para lograr esto de forma nativa, utilizando las API proporcionadas?

Respuestas

0 para la respuesta № 1

Haría algo como esto (en objc, espero que c ++ sdk tenga características similares):

    _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
}