Cocos2d-x学习笔记(12:Action大总结)
注意:本文引自木木的博客http://blog.sina.com.cn/s/blog_659b2b3201011n7c.html网络文章并加以修改。
1.基本动作
Cocos2d提供的基本动作:瞬时动作、延时动作、运作速度。
瞬时动作:就是不需要时间,马上就完成的动作。瞬时动作的共同基类是 InstantAction。
Cocos2d提供以下瞬时动作:
- 放置 – Place
flight->runAction(CCPlace::actionWithPosition(p));
- 隐藏 – Hide
flight->runAction(CCHide::action());
- 显示 – Show
flight->runAction(CCShow::action());
- 可见切换 – ToggleVisibility
flight->runAction(CCToggleVisibility::action());
- 水平翻转/垂直翻转
flight->runAction(CCFlipX::actionWithFlipX(true));
flight->runAction(CCFlipY::actionWithFlipY(true));
- 网格
网格重用 - CCReuseGrid|停止网格 - CCStopGrid
2、延时动作
延时动作就是指动作的完成需要一定时间。因此actionWithDuration 是延时动作执行时的第一个参数,延时动作的共同基类是 CCIntervalAction(包含了组合动作类)。
Cocos2d提供以下瞬时动作(函数命名规则是:XxxxTo: 意味着运动到指定的位置, XxxxBy:意味着运动到按照指定的 x、y 增量的位置。[x、y 可以是负值]):
- 移动到 – CCMoveTo
CCActionInterval *action = CCMoveTo::actionWithDuration(ccTime duration, CCPosition& position);
sprite->runAction(action);
- 移动– CCMoveBy
- 跳跃到 – CCJumpTo 设置终点位置和跳跃的高度和次数。
- 跳跃 – CCJumpBy 设置终点位置和跳跃的高度和次数。
- 贝塞尔 – CCBezierBy 支持 3 次贝塞尔曲线:P0-起点,P1-起点切线方向,P2-终点切线方向,P3-终点。
- 放大到 – CCScaleTo 设置放大倍数,是浮点型。
- 放大 – CCScaleBy
- 旋转到 – CCRotateTo
- 旋转 – CCRotateBy
- 闪烁 – CCBlink 设定闪烁次数
- 色调变化到 – CCTintTo
- 色调变换 – CCTintBy
- 变暗到 – CCFadeTo
- 由无变亮 – CCFadeIn
- 由亮变无 – CCFadeOut
3.组合动作
按照一定的次序将上述基本动作组合起来,形成连贯的一套组合动作。组合动作包括以下几类:
- 序列 – CCSequence
Sequence 的使用非常简单,该类也从 CCIntervalAction 派生,本身就可以被 CocosNode 对象执行。该类的作用就是线序排列若干个动作,然后按先后次序逐个执行。
flight->runAction(CCSequence::actions(action0, action1, action2, NULL));
- 同步 – Spawn
Spawn 的使用非常简单,该类也从 IntervalAction 派生,本身就可以被CocosNode 对象执行。该类的作用就是同时并列执行若干个动作,但要求动作都必须是可以同时执行的。比如:移动式翻转、变色、变大小等。
需要特别注意的是,同步执行最后的完成时间由基本动作中用时最大者决定。
flight->runAction(CCSpawn::actions(action1, action2, sequence, NULL));
- 重复有线次数 – Repeate
重复有限次数的动作,该类也从 IntervalAction 派生,可以被 CocosNode 对象执行。
CCFiniteTimeAction *sequence = CCSequence::actions(action1, action2, NULL);
// 重复运行上述动作序列3次
flight->runAction(CCRepeat::actionWithAction(sequence, 3));
- 反 动作 – Reverse
反 动作就是反向(逆向)执行某个动作,支持针对动作序列的反 动作序列。反 动作不是一个专门的类,而是 CCFiniteAction 引入的一个接口。不是所有的类都支持反 动作,XxxxTo 类通常不支持反 动作,XxxxBy 类通常支持。CCFiniteTimeAction *action2 = action1->reverse();
- 动画 – Animation
动画就是让精灵自身连续执行一段影像,形成模拟运动的效果:行走时的精灵状态、打斗时的状态等。
- 无限重复 – RepeatForever
RepeatForever 是从 Action 类直接派生的,因此无法参与序列和同步;自身也无法反向执行。该类的作用就是无限期执行某个动作或动作序列,直到被停止。
CCAction* action = sprite->runAction(CCRepeatForever::actionWithDuration(CCSequence::actions(action1, action2, NULL));
这个时候可以得到一个action,然后给这个动作设置tag:
action->setTag(1);
当我们想把这个无限重复停止的时候,就可以里利用这个tag将动作删除:
sprite->stopActionByTag(1);
4.速度变化
基本动作和组合动作实现了针对精灵的各种运动、动画效果的改变,但这样的改变的速度是不变的,通过 CCEaseAction 为基类的类系和 CCSpped 类我们可以很方便的修改精灵执行劢作的速度:由快至慢还是由慢至快。
- EaseIn 由慢至快。
- EaseOut 由快至慢
- EaseInOut 由慢至快再由快至慢。
- EaseSineIn由慢至快。
- EaseSineOut 由快至慢
- EaseSineInOut 由慢至快再由快至慢。
- EaseExponentialIn 由慢至极快。
- EaseExponentialOut 由极快至慢。
- EaseExponentialInOut 由慢至极快再由极快至慢。
- EaseElasticIn 橡皮筋式的速度变化
- EaseElasticOut
- EaseElasticInOut
- EaseBounceIn 弹跳,弹起的意思
- EaseBounceOut
- EaseBounceInOut
- EaseBackIn
- EaseBackOut
- EaseBackInOut
- Speed 人工设定速度,还可通过 SetSpeed 不断调整。
5.扩展动作
- 延时动作 – Delay ,比如在动作序列中增加一个时间间歇
flight->runAction(CCSequence::actions(action1, CCDelayTime::actionWithDuration(1.0f), action2, NULL));
- 函数
在动作序列中间或者末尾调用某个函数,执行任何任务:动作、状态修改等。在cocos2d-x中,调用函数的动作一共有4种。
1.CCCallFunc 仅函数调用,无任何参数。
1 void ExtendActionLayer::onCallBack1()
2 {
3 flight->runAction(CCTintBy::actionWithDuration(0.5f, 255, 0, 255));
4 }
5
6 void ExtendActionLayer::onCallFunc(CCObject* pSender)
7 {
8 CCFiniteTimeAction *action1 = CCMoveBy::actionWithDuration(2.0f, ccp(200, 200));
9 CCFiniteTimeAction *action2 = action1->reverse();
10 CCFiniteTimeAction *actionF = CCCallFunc::actionWithTarget(this, callfunc_selector(ExtendActionLayer::onCallBack1));
11 flight->runAction(CCSequence::actions(action1, actionF, action2, NULL));
12 }
2.CCCallFuncN
调用函数,并将当前对象的指针(CCNode指针)作为第一个参数传递进去。
1 void ExtendActionLayer::onCallBack2(CCNode* pSender) 2 { 3 // 在这个例子里,pSender就是flight,因为是他执行了那个actionF 4 pSender->runAction(CCTintBy::actionWithDuration(1.0f, 255, 0, 255)); 5 } 6 7 void ExtendActionLayer::onCallFuncN(CCObject* pSender) 8 { 9 CCFiniteTimeAction *action1 = CCMoveBy::actionWithDuration(2.0f, ccp(200, 200)); 10 CCFiniteTimeAction *action2 = action1->reverse(); 11 CCFiniteTimeAction *actionF = CCCallFuncN::actionWithTarget(this, callfuncN_selector(ExtendActionLayer::onCallBack2)); 12 flight->runAction(CCSequence::actions(action1, actionF, action2, NULL)); 13 }
3.CCCallFuncND
在前一种方式的基础上增加一个数据参数,这是void指针类型。
1 void ExtendActionLayer::onCallBack3(CCNode* pSender, void* pData) 2 { 3 pSender->runAction(CCTintBy::actionWithDuration(static_cast<float>((int)pData), 255, 0, 255)); 4 } 5 6 void ExtendActionLayer::onCallFuncND(CCObject* pSender) 7 { 8 CCFiniteTimeAction *action1 = CCMoveBy::actionWithDuration(2.0f, ccp(200, 200)); 9 CCFiniteTimeAction *action2 = action1->reverse(); 10 // 这里直接将整数常量强转成(void *)类型似乎有欠妥当,但对这些Action的生命周期不太清楚,稍后深入一下。 11 CCFiniteTimeAction *actionF = CCCallFuncND::actionWithTarget(this, callfuncND_selector(ExtendActionLayer::onCallBack3), (void *)2); 12 flight->runAction(CCSequence::actions(action1, actionF, action2, NULL)); 13 }
4.CCCallFuncO
调用函数,并传递一个CCObject指针作为参数。这个似乎不太常用,资料比较少,以后再深入。
相关推荐
在这个"cocos2d-x 2.x action集合(详细注释分类)"的资源中,你将深入学习到如何使用动作(Action)来控制游戏对象的行为,从而实现各种动态效果。 1. **动作(Action)基础**: 动作是Cocos2d-x中改变节点(Node)...
Cocos2d-JS是一款强大的2D游戏开发框架,它结合了JavaScript的灵活性与Cocos2d-x的高效性能,让开发者能够轻松地创建跨平台的游戏。本篇将深入探讨Cocos2d-JS的游戏开发知识,从基础到进阶,帮助你掌握这一利器。 ...
4. **Action系统**:cocos2d-x的动作系统允许开发者轻松实现物体的移动、旋转、缩放等效果,极大地简化了动画制作。 5. **Scene和Layer**:通过Scene和Layer的概念,可以组织游戏的场景和层次结构,方便管理游戏...
《Cocos2d-x实战C++卷》是关东升所著的一本深入探讨Cocos2d-x游戏引擎开发的专业书籍。Cocos2d-x是一个开源的、跨平台的2D游戏开发框架,广泛应用于iOS、Android、Windows等多个操作系统。本书以C++语言为主要编程...
Cocos2d-x是一个开源的游戏开发框架,广泛用于2D游戏、实时渲染应用程序和其他互动内容的制作。这个压缩包“cocos2d-x-3.1.zip”包含了Cocos2d-x框架的3.1版本,这是一个经典且相对旧的版本,可能对于那些寻找历史...
1. **渲染引擎**:cocos2d-x使用OpenGL ES作为图形后端,提供了一系列的2D绘图API,如精灵(Sprite)、层(Layer)、场景(Scene)、动作(Action)等,使得开发者可以方便地创建丰富的2D视觉效果。 2. **场景管理*...
3. **Action和Effects**:Cocos2d-iPhone提供了一系列动作和效果类,如移动、旋转、缩放、淡入淡出等,方便开发者快速创建复杂的动画序列。 4. **Scene Management**:通过CCDirector和CCScene类,开发者可以轻松...
cocos2d-x的动画系统支持帧动画和动作(Action)动画。帧动画可以通过`CCSpriteBatchNode`和`CCAnimation`类来实现,将多张图片序列化成一个动画效果。动作动画则包括平移、旋转、缩放等多种效果,可以组合形成复杂...
Cocos2d-x的动画系统支持帧动画和动作(Action)设计,可以轻松实现这些效果。 5. **资源管理**:游戏中的图片、音频等资源需要正确加载和释放。Cocos2d-x有内置的资源管理模块,如Texture2D、SpriteFrameCache等,...
Cocos2d-JS 是一个基于 JavaScript 的游戏开发框架,它是 Cocos2d-x 的 JavaScript 版本。这个“Cocos2d-JS---demo”压缩包包含的是使用 Cocos2d-JS 开发的游戏或应用的示例,用于展示其功能和效果。通过将这些 demo...
- 掌握Cocos2d-x的基本架构:Cocos2d-x框架中包括场景(Scene)、层(Layer)、精灵(Sprite)、动作(Action)等基本组件,学习如何使用这些组件来构建游戏逻辑。 - 理解资源管理:在Cocos2d-x中,资源管理是开发...
- **动作(Action)**:cocos2d-x提供了丰富的动作类,如移动、旋转、缩放,用于实现角色和物体的动画效果。 - **层(Layer)**:作为游戏界面的基本单位,用于组织和管理屏幕上的元素。 - **物理引擎(Box2D)**...
4. **Action**:动作是cocos2d 的核心特性,它定义了精灵或其他对象的行为,如移动、旋转、淡入淡出等。 四、游戏逻辑与编程 cocos2d 提供了一个基于消息的事件处理系统,开发者可以通过监听触摸事件、定时器事件来...
1. **Cocos2d-x架构**:了解Cocos2d-x的核心组件,如场景(Scene)、层(Layer)、精灵(Sprite)、动作(Action)等,以及如何用Lua来控制这些元素。 2. **Lua与C++交互**:Cocos2d-x支持Lua作为脚本语言,源码会展示如何...
本教程将深入探讨cocos2d-x中的Action(动作)类及其应用,这对于初学者掌握游戏对象的行为控制至关重要。 一、Action基础 Action是cocos2d-x框架中的核心组成部分之一,它定义了物体在一段时间内的行为,如移动、...
3. **动画**:Cocos2d-Js支持帧动画和动作(Action),可以实现角色行走、攻击等各种动态效果。源码中会包含各种类型的动画实现,如精灵帧动画、序列动作等。 4. **物理引擎**:Cocos2d-Js集成了Box2D物理引擎,...
首先,Cocos2d-JS的核心概念包括场景(Scene)、层(Layer)、精灵(Sprite)、动作(Action)等。场景是游戏中的一个独立单元,可以包含多个层,层则负责管理游戏中的各种元素。精灵是游戏中的基本图形对象,可以...
Cocos2d-x的渲染引擎基于OpenGL ES,提供了丰富的图形绘制API,包括精灵(Sprite)、层(Layer)、场景(Scene)、动作(Action)等,让开发者可以轻松构建2D游戏世界。 四、精灵与动作 精灵是Cocos2d-x中的基本...
Cocos2d-x是一款流行的开源游戏开发框架,主要用于创建2D游戏、演示程序和其他图形交互应用。这个"跑酷(StarterKit)游戏源码"是基于Cocos2d-x框架构建的一个Android游戏项目,旨在为开发者提供一个基础的跑酷类...