像SpriteKit一样的Cocos2d v3组动作

时间:2014-03-27 14:41:08

标签: cocos2d-iphone

所需的分组行为

我如何分组 CCAction,以便在同时执行所有操作时知道该组中的所有操作何时完成?< / p>

精确的SpriteKit等价物

+ (SKAction *)group:(NSArray *)actions

用例

我想在棋盘游戏中使用它。

我正在用CCActions在我的棋盘上移动我的游戏元素。在所有这些动画结束时,我希望CCActionCallFunc作为回调来更新游戏逻辑并再次允许用户交互。

理想情况下,我想在CCActionCallFunc中添加 CCActionGroup CCActionSequence,然后按顺序执行。

2 个答案:

答案 0 :(得分:2)

也许你可以试试:

CCActionMoveTo *moveTo; // action to group
CCActionScaleBy *scale; // action to group
CCNode *node;

// Init the above actions...

CCActionSpawn *groupAction = [CCActionSpawn actionWithArray:@[moveTo, scale]];
CCActionSequence *sequence = [CCActionSequence actionWithArray:@[groupAction, [CCActionCallFunc actionWithTarget:self selector:@selector(allDone)]]];
// allDone is your method to run...
[_node runAction:sequence];

答案 1 :(得分:0)

由于cocos2d没有采用任何类型的多线程,你可以按顺序触发动作:

[node runAction:action1];
[node runAction:action2];
[node runAction:action3];
[node runAction:action4];

只需将CCCallBlock添加到运行块的最长运行序列中。如果所有操作都运行相同的长度,您可以将调用块添加到action4序列,因为它最后完成。

在Sprite Kit中,没有任何保证action1到action4的最后完成,在cocos2d中有:最后一个要运行也将是最后一个完成,假设它们都运行相同的持续时间

这是他们其他行动也将结束的时候。或者,您可以在每个组的末尾为每个组创建一个序列,它们都运行一个CCCallBlock来增加一个计数器,而最后一个块,其中count等于分组动作的数量,执行实际&#34;结束组动作& #34;代码。