第一部分:CCActionInterval家族(持续动作)

持续动作,顾名思义,就是该动作的执行将持续一段时间。因此持续动作的静态生成函数,往往附带一个时间值Duration。例如:

  1. CCActionInterval *moveByAction=CCMoveBy::actionWithDuration(0.5f,ccp(5,5));
持续动作类名后缀:一般有两种后缀,一种是To,一种是By。To表示最终达到的目标值,By表示增量值。如:

  1. CCMoveBy::actionWithDuration(0.5f,ccp(5,5));//表示花0.5秒,按向量(5,5)移动一段距离
  2. CCMoveTo::actionWithDuration(0.5f,ccp(5,5));//表示花0.5秒,移动到坐标(5,5)
持续动作比立即动作的数量要多很多,常用的CCActionInterval子类动作有:

简单的:
CCMoveTo:移动到、CCMoveBy:按……移动
CCJumpTo:跳跃到、CCJumpBy:按……跳跃
CCBezierTo:贝兹移动到、CCBezierBy:按……贝兹移动
CCRotateTo:旋转到、CCRotateBy:按……旋转
CCScaleTo:缩放到、CCScaleBy:按……缩放
CCSkewTo:切变到、CCSkewBy:按……切变
CCTintTo:颜色渐变到、CCTintBy:按……颜色渐变

CCFadeIn:从无到有,也叫淡入、CCFadeOut:从有到无,也叫淡出、CCFadeTo:改变不透明度到某个值
CCBlink:闪耀
CCDelayTime:延时

复杂的:
CCAnimate:帧动画,这个我们在第四节讲过,关于动画的问题不是一句两句就能说完,以后会慢慢展开
CCGridAction家族:网格动画
包装器:CCRepeat:重复执行几次、CCRepeatForever:永远执行、CCSequence:按序列执行、CCSpawn:同时执行、CCActionEase家族:补间动画

第二部分:简单的持续动作

这些动作都非常简单,和立即动作的区别只是增加了一个执行时间而已。但还有一些要注意的地方:

1.旋转动作顺时针是正方向
2.关于贝兹曲线
贝兹曲线的描述结构体如下:
  1. /** @typedef bezier configuration structure
  2. */
  3. typedef struct _ccBezierConfig {
  4. //! end position of the bezier
  5. CCPoint endPosition;
  6. //! Bezier control point 1
  7. CCPoint controlPoint_1;
  8. //! Bezier control point 2
  9. CCPoint controlPoint_2;
  10. } ccBezierConfig;
 
如果执行节点是this的话,那么对应个点的位置如图。
注意,当使用CCBezierTo时,ccBezierConfig的点都是绝对坐标点。但如果使用CCBezierBy,ccBezierConfig的点都是相对坐标点。这点要谨记。
 
第三部分:一些包装器

这些动作单独无法起作用,需要包装其他动作类才行。他们的作用是对于动作的执行,增加一些变化。非常类似于装饰者模式。

1.CCRepeat:用于重复执行几次动作,times表示执行次数
  1. static CCRepeat *   CCRepeat::actionWithAction (CCFiniteTimeAction *pAction, unsigned int times)
 
使用举例:在我的炸弹人例子中,用到如下写法,我播放一个炸弹动画若干次,然后启动爆炸的相关代码。
  1. CCFiniteTimeAction *action=getAnimate();//获得炸弹播放动画,自己实现的函数
  2. CCAction *sequneceAction = CCSequence::actions(
  3. CCRepeat::actionWithAction(action,5),
  4. CCCallFunc::actionWithTarget(this, callfunc_selector(Bomb::deadOnCallback)),
  5. NULL);
  6. sprite->runAction(sequneceAction);

2.CCRepeatForever:永远执行一个动作
  1. static CCRepeatForever *    CCRepeatForever ::actionWithAction (CCActionInterval *pAction)
 使用举例:比如,一个精灵我只会改变他的位置,但是不需要改变他的动画,那么我就可以使用这个来保持这个动画一直运行,我在炸弹人的Monster类中使用了类似代码:
  1. CCActionInterval *action=getAnimate();//获得炸弹播放动画,自己实现的函数
  2. spirte->runAction(CCRepeatForever::actionWithAction(action));
3.CCSequence:按序列执行动作,这会让节点连续执行几个动作。
  1. static CCFiniteTimeAction *     CCSequence::actions (CCFiniteTimeAction *pAction1,...)
使用举例:这个例子经常使用的时候,就是执行一个动作,然后回调。比如主角行走一个格子后,切换为站立状态。我在炸弹人的Hero类中使用了这种方法:
  1. CCAction *sequneceAction = CCSequence::actions(moveByAction,CCCallFunc::actionWithTarget(this, callfunc_selector(Hero::moveDoneCallback)),NULL);
  2. this->runAction(sequneceAction);
注意最后要使用NULL结尾。表示传参结束。我不明白为什么非要强制加NULL,按道理说C++不定参数表,可以不用NULL的。看源代码才发现,里面用到了真值判断刷循环。我不知道这是为了和ObjectiveC语法保持一致还是为什么,我并不熟悉Objc。
  1. CCFiniteTimeAction* CCSequence::actions(CCFiniteTimeAction *pAction1, ...)
  2. {
  3. va_list params;
  4. va_start(params, pAction1);
  5. CCFiniteTimeAction *pNow;
  6. CCFiniteTimeAction *pPrev = pAction1;
  7. while (pAction1)
  8. {
  9. pNow = va_arg(params, CCFiniteTimeAction*);
  10. if (pNow)
  11. {
  12. pPrev = actionOneTwo(pPrev, pNow);
  13. }
  14. else
  15. {
  16. break;
  17. }
  18. }
  19. va_end(params);
  20. return pPrev;
  21. }

4.CCSpawn:同时执行几个动作,最终动作的持续时间,由时间最长的那个动作确定。
  1. static CCFiniteTimeAction *     actions (CCFiniteTimeAction *pAction1,...);
使用举例:可以用CCSpacwn来做翻跟头的动画,只需要组合moveTo和RotateBy。Test中有这个代码:
  1. CCAction*  action = CCSpawn::actions(
  2. CCJumpBy::actionWithDuration(2, CCPointMake(300,0), 50, 4),
  3. CCRotateBy::actionWithDuration( 2,  720),
  4. NULL);
  5. m_grossini->runAction(action);
注意,从字面意思你就知道,不要在CCSequence中使用CCRepeatForever,两者是互相冲突的。

第四部分:反动作

反动作是使用一个接口实现的,该接口直接返回一个此动作的反动作。
  1. virtual CCFiniteTimeAction *    reverse (void)
注意,并非所有动作都有反动作,xxxTo没有,xxxBy则有。
使用举例:反动作很容易造出一个动作循环来,在Test中有这个代码:
  1. CCActionInterval*  jump = CCJumpBy::actionWithDuration(2, CCPointMake(300,0), 50, 4);
  2. CCFiniteTimeAction*  action = CCSequence::actions( jump, jump->reverse(), NULL);
  3. m_grossini->runAction(action);

参考文献:
     cocos2dx Test程序

Cocos2d-x CCActionInterval的更多相关文章

  1. COCOS2D-JS入门-web端项目部署

    下载cocos2d-js文件,建议上官网下载(外国官网或者中国官网都可以) 外国官网:http://cocos2d-x.org/download(选择最新版即可,我下载时为3.9版本,大概300多M) ...

  2. cocos2d 走动椭圆

    1.效果图 艺术与规划说他想与我合作在全国率先主角光环加,椭圆形走动. cocos2d自带没有,參考网上的写了一个. 2.椭圆数学知识 有关椭圆的数学知识我已经忘光了.网上找了点资料: a是椭圆的长半 ...

  3. 小尝试一下 cocos2d

    好奇 cocos2d 到底是怎样一个框架,正好有个项目需要一个游戏框架,所以稍微了解了一下.小结一下了解到的情况. 基本概念 首先呢,因为 cocos2d 是基于 pyglet 做的,你完全可以直接用 ...

  4. 采用cocos2d-x lua 制作数字滚动效果样例

    require "Cocos2d"require "Cocos2dConstants"local testscene = class("testsce ...

  5. Cocos2d 利用继承Draw方法制作可显示三维数据(宠物三维等)的三角形显示面板

    很久没有写博客了,这段时间比较忙,又是搬家又是做自己的项目,还有太多琐碎的事情缠身,好不容易抽出时间把最近自己做的一些简单例子记录一下. 在我的项目中,我需要一个显示面板来显示游戏中的一个三维数据,例 ...

  6. iPhone开发与cocos2d 经验谈

    转CSDN jilongliang : 首先,对于一个完全没有mac开发经验,甚至从没摸过苹果系统的开发人员来说,首先就是要熟悉apple的那一套开发框架(含开发环境IDE.开发框架uikit,还有开 ...

  7. cocos2d学习记录

    视频 - http://www.manew.com/forum-105-3.html一个论坛帖 - http://www.zhihu.com/question/21114802官网 - http:// ...

  8. Android下Cocos2d创建HelloWorld工程

    最近在搭建Cocos2d的环境,结果各种问题,两人弄了一天才能搞好一个环境-! -_-!! 避免大家也可能会遇到我这种情况,所以写一个随笔,让大家也了解下如何搭建吧- 1.环境安装准备 下载 tadp ...

  9. 学生信息管理系统(cocos2d引擎)——数据结构课程设计

    老师手把手教了两天半,看了一下模式,加了几个功能就大功告成了!!! 给我的感想就是全都是指针! 添加图片精灵: CCSprite*  spBG = CCSprite::create("&qu ...

  10. cocos2d触碰例子代码

    // // TestLayer.h // MiniTD // // Created by OnePiece on 12-7-30. // Copyright 2012年 __MyCompanyName ...

随机推荐

  1. XMPPFramework ios 例子中链接服务器失败,opnefire 服务器链接失败

    首先说下上周又做了几天得无用功, 之前一直用的是ejabberd ,这次换了opnefire,有人说opnefire跟新的xmpp协议不兼容,后来又更换成了ejabberd, Github 上得dem ...

  2. MvvmCross[翻译] 使用Xamarin与MvvmCross完成一个跨平台App

    总览 原文:https://github.com/MvvmCross/MvvmCross/wiki/Tip-Calc-A-first-app 我们所做的第一个Model-View-ViewModel( ...

  3. C# 键值对排序

    static void Main(string[] args) { SortedList sl = new SortedList(); sl.Add("001", "Za ...

  4. java 反射取得方法入参类型的泛形

    package TestReflectClass; import java.util.List; /** * Created by wangyang on 2016/12/16. */ public ...

  5. mysql 刘道成视频教程 第3课

    第3课: 1.mysql中条件使用关键字where: 2.查 select name,content from msg ; select name,content 控制列 where id>2 ...

  6. Listview控件实现已选择效果

    Winform中用Listview控件实现更新点击选择后已选择效果,如图: 代码如下: private void frmSelect_Load(object sender, EventArgs e) ...

  7. android sdk api的层次结构

    一.系统级:android.accounts android.app     1.OS 相关         android.os         android.os.storage         ...

  8. Hadoop, Python, and NoSQL lead the pack for big data jobs

    Hadoop, Python, and NoSQL lead the pack for big data jobs   Rise in cloud-based analytics could incr ...

  9. Coursera《machine learning》--(14)数据降维

    本笔记为Coursera在线课程<Machine Learning>中的数据降维章节的笔记. 十四.降维 (Dimensionality Reduction) 14.1 动机一:数据压缩 ...

  10. www.nygwkt.com

    南京宁阳制冷设备维修有限公司是专业从事厨房空调,http://www.nygwkt.com岗位空调制冷设备设计.制造.安装.改造.维修.保养的专业化公司.在南京享有很高的客户评论. 我们对南京宁阳制冷 ...