cocos2dx --- Action介绍 (一、二) (动作顺序、动作组合效果)

cocos2dx --- Action介绍 (一、二) (动作顺序、动作组合效果),第1张

概述http://www.cnblogs.com/changchao/category/486605.html 1. cocos2dx中,CCAction的类的结构图   2.动作的基类是CCAction,通过继承它可以实现很多不同的动作,主要分为三大类:CCFiniteTimeAction(有限次动作执行类)、CCSpeed(节点执行速度类)、CCFollow(节点跟随另一个节点移动)。在实际中,主

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,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,serif; Font-size:12px; line-height:1.8em; background-color:rgb(255,255,255); color:rgb(51,153)"> CCMoveto* move_3 = CCMoveBy::create(2,serif; Font-size:12px; line-height:1.8em"> 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),serif; Font-size:12px; line-height:1.8em"> sprite->runAction(action); CCRepeat:有限次重复一个动作。 CCMoveBy* action = CCMoveBy::create(2,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*,255); Font-size:12px!important; line-height:1.5!important">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介绍 (一、二) (动作顺序、动作组合效果)全部内容,希望文章能够帮你解决cocos2dx --- Action介绍 (一、二) (动作顺序、动作组合效果)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1021337.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存