cocos2dx --- Action介绍 (一)
部分转载自:http://blog.csdn.net/qiurisuixiang/article/details/8773797
1. cocos2dx中,CCAction的类的结构图
2.动作的基类是CCAction,通过继承它可以实现很多不同的动作,主要分为三大类:CCFiniteTimeAction(有限次动作执行类)、CCSpeed(节点执行速度类)、CCFollow(节点跟随另一个节点移动)。在实际中,主要用到的是CCFiniteTimeAction类。
3.CCFiniteTimeAction分为CCActionInstant(瞬时动作)和CCActionInterval(延迟动作)。其中CCActionInstant动作没有执行过程,动作瞬时完成,而CCActionInterval动作执行需要一定的时间(或者一个过程)。在实际中,为了制作出炫丽的动画效果,使用得多的是CCActionInterval延时动作。
4.在上面的类结构图中,CCActionInterval的子类很多,简单介绍其中常用的,也可以通过cocos2d-x中自带的TestCpp例子来学习。(1) CCMoveTo / CCMoveBy 移动两者的主要差别在于CCMoveTo是移动到指定坐标,CCMoveBy是相对坐标。例如CCMoveTo(2.0f, ccp(50, 50))是在2s时间内移动到点x = 50、y = 50处,而CCMoveBy(2.0f, ccp(50, 50))表示2s时间内向x方向移动50个单位,向y方向移动50个单位;(2) CCScaleTo / CCScaleBy 缩放;(3) CCRotateTo / CCRotateBy 旋转;(4) CCSkewTo / CCSkewBy 扭曲;(5) CCJumpTo / CCJumpBy 跳跃;(6) CCBezierTo / CCBezierBy 贝塞尔曲线;(7) CCBink 闪烁;(8) CCFadeIn / CCFadeOut 淡入淡出;(9) CCTintTo / CCTintBy 染色,等
5.下面就个人体会,重点分析以下几个动作:CCSequence,CCSpawn,CCRepeat,CCRepeatForever,CCActionCamera
CCSequence:是用来按顺序执行一系列的动作。需要注意是,在执行的动作系列中不能出现CCRepeat这种无限的动作。
1 CCMoveTo* move_1 = CCMoveTo::create(2,ccp(10,20)); 2 CCMoveBy* move_2 = CCMoveBy::create(2,ccp(10,20)); 3 CCMoveTo* move_3 = CCMoveBy::create(2,ccp(10,20)); 4 CCSequence* seq = CCSequence::create(move_1,move_2,move_3,NULL); 5 sprite->runAction(seq);
CCSpawn:同时执行一系列动作,执行的时间以子动作中最长事件为准。
1 CCSpawn* action = CCSpawn::create( 2 CCJumpBy::create(2 ,ccp(300,0) ,50 ,4), 3 CCRotateBy::create(2,720), NULL); 4 sprite->runAction(action);
CCRepeat:有限次重复一个动作。
1 CCMoveBy* action = CCMoveBy::create(2,ccp(10,10)); 2 CCRepeat* repeat = CCRepeat::create(action,3); 3 sprite->runAction(repeat);
CCRepeatForerver:无限次重复一个动作。
1 CCRotateBy* rotate = CCRotateBy::create(1.0,360); 2 CCRepeatForever* action2 = CCRepeatForever::create(rotate); 3 sprit->runAction(action2);