让精灵在屏幕中进行移动就是我们想要的最终结果了吗?当然不是。可不可以运行多个动作呢?是的,没问题,Cocos2d-x通过几个方式来支持这种操作。
就如同它的名字,一个序列Sequence
就是多个动作按钮一定顺序进行排列。需要按反方向来播放序列动作?也没问题,Cocos2d-x也支持这个操作。
看一下面的例子,通过序列Sequence
逐步移动一个精灵Sprite
:
这个Sequence
很容易创建:
auto mySprite = Node::create()
// move to point 50,10 over 2 seconds
auto moveTo1 = MoveTo::create(2, Vec2(50,10));
// move from current postion by 100,10 over 2 seconds
auto moveBy1 = MoveBy::create(2, Vec2(100,10));
// move to point 150,10 over 2 seconds
auto moveTo2 = MoveTo::create(2, Vec2(150,10));
// create a delay
auto delay = DelayTime::create(1);
mySprite->runAction(Sequence::create(moveTo1, delay, moveBy1, delay->clone(), moveTo2, nullptr));
本例中按顺序播放序列中的每一个动作,如何同步一起运行这些动作?Cocos2d-x也支持这个操作,它称做
Spawn
。
Spawn
会在同一时间播放所有指定的动作。有一些可能比别的稍长一些,所以出现这种情况动作的播放不会在同一时间完成。
auto myNode = Node::create()
auto moveTo1 = MoveTo::create(2, Vec2(50,10));
auto moveBy1 = MoveTo::create(2, Vec2(100,10));
auto moveTo2 = MoveTo::create(2, Vec2(150,10));
myNode->runAction(Spawn::create(moveTo1, moveBy1, moveTo2, nullptr));
为什么要使用
Spawn
呢?有什么理由吗?当然!当游戏的主角获得能力提升时要播放多个动作的时候。当BOSS战的最后阶段需要同时播放多个动作来终结的时候。