初探CCAction(动作)

cocos2d-x为我们提供了相当方便的动作制作。主要有两种:瞬时动作(基类CCActionInstanse)和延时动作(基类CCActionInterval)。我估计大部分人关心的都是延时动作,因为有动感,才能称为动作嘛。

延时动作中,有很多种类型:移动(CCMoveTo,CCMoveBy),旋转(CCRotateTo,CCRotateBy),变形(CCScaleTo,CCScaleBy),跳跃(CCJumpTo,CCJumpBy)等动作。具体可以到http://www.cocos2d-x.org/embedded/cocos2d-x/d7/d12/classcocos2d_1_1_c_c_action.html查看。

实现动作的方法:

1,创建动作绑定结点(代码来自官方的Test工程)

 m_grossini = CCSprite.spriteWithFile(TestResource.s_pPathGrossini);

2,定义动作

CCActionInterval actionTo = CCMoveTo.actionWithDuration(2, new CCPoint(s.width - 40, s.height - 40));

3,动作执行

 m_grossini.runAction(actionTo);

上面的就可以完成一个简单的移动动作。

通过研究Test工程。动作的完成主要是由每个动作类的actionWithDuration(在规定条件内完成动作),和reverse(恢复,反过来执行一遍动作)来完成。

比如上面的定义动作的方法,就是在2秒内移动到距离右上角(40,40)的地方。如果还要返回到原位,用原来的轨迹。那么修改为如下:

CCActionInterval actionTo = CCMoveTo.actionWithDuration(2, new CCPoint(s.width - 40, s.height - 40));
m_grossint.runAction(CCSequence.actions(actionTo,actionTo.reverse()));

动作的合成主要靠CCSequence(类似队列,按照顺序执行动作),CCRepeatForever(无限重复动作),CCRepeat(有限重复动作)等完成。

CCSequence用法:

CCActionInterval actionTo = CCMoveTo.actionWithDuration(2, new CCPoint(s.width - 40, s.height - 40));
m_grossint.runAction(CCSequence.actions(actionTo,actionTo.reverse()));
动作执行顺序就是先执行actionTo,再执行action.reverse()这个动作,其实CCSequence也有Reverse这个方法。那动作的执行顺序就是从后面到前面了。

CCRepeatForever用法:

static CCRepeatForever actionWithAction  ( CCActionInterval   pAction ) 

例子:m_grossint.runAction(CCRepeatForever.actionWithAction(CCSequence.actions(actionTo,actionTo.reverse())));

CCRepeat的用法和CCRepeatForever的用法类型。就是多了个time(次数)这个参数。


那么,复杂的动作怎么实现呢,那得靠你的想象力了。怎么把简单的动作组合到一块。

复杂的动作基本都是靠CCSequence,CCRepeat等组合起来使用,具体例子可以看官方的test工程。里面提供了大量的例子。我就不在这里展示了。

   





   

你可能感兴趣的:(c)