cocos2dx --- Action介绍 (一、二) (动作顺序、动作组合效果)
2014-12-13 19:34
423 查看
http://www.cnblogs.com/changchao/category/486605.html
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这种无限的动作。
CCMoveTo* move_1 = CCMoveTo::create(2,ccp(10,20));
CCMoveBy* move_2 = CCMoveBy::create(2,ccp(10,20));
CCMoveTo* move_3 = CCMoveBy::create(2,ccp(10,20));
CCSequence* seq = CCSequence::create(move_1,move_2,move_3,NULL);
sprite->runAction(seq);
复制代码
CCSpawn:同时执行一系列动作,执行的时间以子动作中最长事件为准。
CCSpawn* action = CCSpawn::create(
CCJumpBy::create(2 ,ccp(300,0) ,50 ,4),
CCRotateBy::create(2,720), NULL);
sprite->runAction(action);
复制代码
CCRepeat:有限次重复一个动作。
CCMoveBy* action = CCMoveBy::create(2,ccp(10,10));
CCRepeat* repeat = CCRepeat::create(action,3);
sprite->runAction(repeat);
复制代码
CCRepeatForerver:无限次重复一个动作。
CCRotateBy* rotate = CCRotateBy::create(1.0,360);
CCRepeatForever* action2 = CCRepeatForever::create(rotate);
sprit->runAction(action2);
复制代码
有时需要指定在某一个时刻有谁执行某个动作,此时就有必要使用CCActionInstant继承树中一类特殊的类,即CCCallFunc家族。
CCCallFunc家族主要有四个类:
这四个类对应了四个不同的函数接口;
在使用此四类时,需要按需求使用上述4种回调函数的定义形式,并且对自定义的回调函数需用利用cocos2dx的宏一转换为函数指针类型,对应的宏定义:
使用举例:
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这种无限的动作。
CCMoveTo* move_1 = CCMoveTo::create(2,ccp(10,20));
CCMoveBy* move_2 = CCMoveBy::create(2,ccp(10,20));
CCMoveTo* move_3 = CCMoveBy::create(2,ccp(10,20));
CCSequence* seq = CCSequence::create(move_1,move_2,move_3,NULL);
sprite->runAction(seq);
复制代码
CCSpawn:同时执行一系列动作,执行的时间以子动作中最长事件为准。
CCSpawn* action = CCSpawn::create(
CCJumpBy::create(2 ,ccp(300,0) ,50 ,4),
CCRotateBy::create(2,720), NULL);
sprite->runAction(action);
复制代码
CCRepeat:有限次重复一个动作。
CCMoveBy* action = CCMoveBy::create(2,ccp(10,10));
CCRepeat* repeat = CCRepeat::create(action,3);
sprite->runAction(repeat);
复制代码
CCRepeatForerver:无限次重复一个动作。
CCRotateBy* rotate = CCRotateBy::create(1.0,360);
CCRepeatForever* action2 = CCRepeatForever::create(rotate);
sprit->runAction(action2);
复制代码
有时需要指定在某一个时刻有谁执行某个动作,此时就有必要使用CCActionInstant继承树中一类特殊的类,即CCCallFunc家族。
CCCallFunc家族主要有四个类:
1 CCCallFunc *CCCallFunc::actionWithTarget(SelectorProtocol* pSelectorTarget,SEL_CallFunc selector); 2 CCCallFuncN *CCCallFuncN::actionWithTarget(SelectorProtocol* pSelectorTarget,SEL_CallFuncN selector); 3 CCCallFuncND *CCCallFuncND::actionWithTarget(SelectorProtocol* pSelectorTarget,SEL_CallFuncND selector, void* d); 4 CCCallFuncO *CCCallFuncO::actionWithTarget(SelectorProtocol* pSelectorTarget,SEL_CallFuncO selector, CCObject* pObject)
这四个类对应了四个不同的函数接口;
1 typedef void (SelectorProtocol::*SEL_CallFunc)(); 2 typedef void (SelectorProtocol::*SEL_CallFuncN)(CCNode*); 3 typedef void (SelectorProtocol::*SEL_CallFuncND)(CCNode*, void*); 4 typedef void (SelectorProtocol::*SEL_CallFuncO)(CCObject*);
在使用此四类时,需要按需求使用上述4种回调函数的定义形式,并且对自定义的回调函数需用利用cocos2dx的宏一转换为函数指针类型,对应的宏定义:
1 #define callfunc_selector(_SELECTOR) (SEL_CallFunc)(&_SELECTOR) 2 #define callfuncN_selector(_SELECTOR) (SEL_CallFuncN)(&_SELECTOR) 3 #define callfuncND_selector(_SELECTOR) (SEL_CallFuncND)(&_SELECTOR) 4 #define callfuncO_selector(_SELECTOR) (SEL_CallFuncO)(&_SELECTOR)
使用举例:
1 CCCurveMove* curveMove = CCCurveMove::create(fromtime,ccp(size.width - iRandPos_f, -size.height*0.5),sign*size.width*0.4,0.006); 2 CCCallFuncN *actDone = CCCallFuncN::actionWithTarget(this, callfuncN_selector(LeavesLayer::resetLeafPos)); 3 CCFiniteTimeAction *putdown = CCSequence::actions(curveMove,actDone, NULL); 4 sprite->runAction(putdown);
相关文章推荐
- cocos2dx中关于Action动作的相关API的具体介绍
- cocos2dx中关于Action动作的相关API的详细介绍
- 【iOS-Cocos2d游戏开发】Cocos2d-iPhone动作Action-组合动作
- cocos2d开发学习三:节点的动作(Action)介绍
- cocos2dx 常用动作(action)例子集锦
- cocos2dx 场景切换效果与调用顺序
- cocos2dx 动作篇 组合动作Spawn 和 Sequence
- 【iOS-Cocos2d游戏开发】Cocos2d-iPhone动作Action-基本动作介绍
- cocos2dx多个精灵调用runAction()方法执行组合动作,只有最后一个精灵有效的问题
- cocos2dx 3.2中精灵帧动画的使用以及动作组合
- cocos2dx 3.1.1官方demo阅读-ActionManagerTest【动作管理】
- Lua_顺序动作、组合动作、重复动作、永远重复动作和反向动作
- cocos2dx --- Action介绍 (二)
- cocos2dX Action 稍微复杂些的动作
- 四、Cocos2dx之动作(CCAction)
- cocos2dx之动作Action
- 【iOS-Cocos2d游戏开发】Cocos2d-iPhone动作Action-基本动作介绍
- cocos2dx之CCGrid3D波浪效果动作
- cocos2dx-Action动作
- 和屌丝一起学cocos2dx-Action动作