`
xidajiancun
  • 浏览: 457547 次
文章分类
社区版块
存档分类
最新评论

Cocos2d-x教程(7)-动作

 
阅读更多

欢迎加入 Cocos2d-x 交流群:193411763

转载时请注明原文出处http://blog.csdn.net/u012945598

Cocos2d-x中的动作基类是CCAction,CCAction的绝大多数实现类都派生自CCFiniteTimeAction,由CCFiniteTimeAction派生出的两个主要类分别是瞬时动作(CCActionInstant)和持续性动作(CCActionInterval),这两类动作是可以配合使用的,在后面我们将会讲解。

7.1 瞬时动作

瞬时动作就是指能立刻完成那个的动作,比如设定位置,设定缩放,这些动作在下一帧会立刻执行并完成动作。下面介绍一下常用的瞬时动作。

1.CCPlace

该动作用于将节点放置到某个指定位置,作用于修改节点的Position属性相同(Sprite->setPosition(ccp(100,100))),

CCFiniteTimeAction * placeAction = CCPlace::create(ccp(100,100));

Sprite->runAction(placeAction);

2.CCFlipX ,CCFlipY

这两个动作分别用于将精灵沿X和Y轴反向显示,其作用与setFlipX,setFlipY的属性相同,将他们包装成动作类也是为了便于与其他动作进行组合。

CCFiniteTimeAction * flipXAction =CCFlipX::create(true);

Sprite->runAction(flipXAction);

3.CCShow和CCHide

这两个动作分别用于显示和隐藏节点,其作用与节点的setVisible属性的作用相同。

CCFiniteTimeAction * hideAction=CCHide::create();

Sprite->runAction(hideAction);

7.2 持续性动作

持续性动作指的是在一段时间内逐渐完成的动作,一般情况下同一种持续性动作都会存在两种不同的变种动作,分别具有To和By的后缀,To为绝对变化,By为相对变化,下面我们来看几个例子

1.CCMoveTo和CCMoveBy

两种动作都用于使节点做直线运动,我们分别创建两个动作

CCMoveTo::create(2.0f,ccp(100,100));

CCMoveBy::create(2.0f,ccp(100,100));

CCMoveTo中,第一个参数2.0f代表在两秒钟之内完成动作,第二个参数表示使节点移动到x,y坐标分别为100,100的位置,而在CCMoveBy中则表示在2秒内节点向x方向移动100像素,向y方向移动100像素,表示相对位移。

2.CCJumpTo和CCJumpBy

两种动作表示使节点以一定的轨迹跳跃到指定的位置,例如 创建一个跳跃动作:两秒内,原地跳跃,高度250像素,跳跃一次

CCJumpBy * jump= CCJumpBy::create(2.0f , ccp(0,0) , 250 , 1);

CCJumpTo的初始化方法:CCJumpTo::create(ccTime duration, CCPoint pos , float height , int jumps);

3.贝塞尔曲线运动 CCBezierTo和CCBezierBy

贝塞尔曲线运动也就是抛物线,对于数学不太好的人来说相对难以理解,大家可以上网搜索一下贝塞尔曲线的相关知识。下面是创建贝塞尔曲线运动的方法:

//创建贝塞尔曲线的配置

ccBezierConfig bezier;

bezier.controlPoint_1=ccp(100,0); //波谷偏向值

bezier.controlPoint_2=ccp(200,250); //波峰偏向值

bezier.endPosition=ccp(300,50); //动作终点

CCBezierTo * bezierTo=CCBezierTo::create(4.0f,bezier);//创建CCBezierTo的动作对象

sprite->runAction(bezierTo); //精灵执行动作

其中动作的起始位置就是精灵所在的位置。

4.CCScaleTo和CCScaleBy

两种动作的作用是产生缩放的效果,使节点的缩放系数随时间线性变化

CCScaleTo * scale=CCScaleTo::create(2.8f,0.4f,1.0f);//三个参数分别代表动作持续时间,X方向拉伸倍数,Y方向拉伸倍数

CCScaleBy * scale=CCScaleBy::create(2.8f,0.4f,1.0f);//CCScaleBy与To的区别在于By是,By是在原来的倍数基础上拉伸,比如原来是1.0倍,则拉伸后X方向是0.4倍,如果原来是2.0倍,则现在X方向是0.8倍。

在卡牌游戏中的卡牌翻转效果就可以用CCScale动作来实现。

5.CCRotateTo和CCRotateBy

两种动作产生旋转的效果,第一个参数是时间,第二个参数为旋转角,正方向为顺时针方向

CCRotateTo * Rot1=CCRotateTo::create(2.0f , 90);

其中CCRotateBy也是在原来的旋转角度基础上再旋转。

6.CCFadeIn和CCFadeOut

产生淡入淡出的效果,前者为淡入,后者为淡出。只有实现了CCRGBAProtocol接口的节点才可以执行这类动作,这是因为与透明度或颜色相关的属性都继承自CCRGBAProtocol接口。不过许多常见的节点已经实现了该接口,如CCSprite ,CCLayerColor等,所以一般我们不用当心这个问题

CCFadeIn::create(ccTime duration) ;

CCFadeOut::create(ccTime duration);

7.CCFadeTo

设置一段时间内的透明度变化

CCFadeTo::create(ccTime duration,Glubyte opacity);

Glubyte是8位无符号整数,可以取0-255内的任意整数,该动作只能应用在精灵上,子节点不会受父节点影响。

8.CCBlink

该动作可使节点闪烁,其参数为持续时间和闪烁次数

CCBlink::create(ccTime duration,unsigned int uBlicks);

7.3 复合动作

1.重复(CCRepeat/CCRepeatForever)

CCRepeat可以指定重复的次数,而CCRepeatForever是让一个动作无限重复。

CCRepeat * repeatAction =CCRepeat::create(moveAction,3); //指定一个moveAction动作重复三次

CCRepeatForever * repeatForeverAction =CCRepeatForever::create(moveAction);//让moveAction动作永远重复

Sprite->runAction(repeatForeverAction);//精灵执行动作

2.并列(CCSpawn)

有时候我们希望一个精灵一边旋转,一个向前走,同时也会跳,这些动作同时执行,我们可以用CCSpawn来实现

CCAction * action =CCSpawn::create(rotateAction,moveAction,jumpAction,NULL);

CCSpawn也是一个动作,只不过这个动作中可以包含若干个动作,并且这些动作是同时执行的。由于CCSpawn的create函数的参数是可变的,所以最后一个参数用NULL表示结束。大家可以观察到创建动作的时候笔者使用的是CCAction,这是因为CCAction是所有动作类的父类,能直接用父类的地方就直接使用父类,这是一种不错的编程思想,当然如果不理解也可以直接使用CCSpawn创建。

3.序列(CCSequence)

CCSequence的使用其实与CCSpawn类似,它们的区别在于 CCSequence中包含的动作是一个一个执行的,而CCSpawn中的动作是一起执行的

CCAction * action =CCSequence::create(rotateAction,moveAction,jumpAction,NULL);

在这段代码中,会首先执行rotateAction动作,待动作执行完后再执行moveAction,moveAction执行完后再执行jumpAction。需要注意的是部分动作并不被复合动作支持,例如CCRepeatForever动作。

7.4 动作监听结束 CCCallFunc

CCCallFunc是一个看不见的动作,它的作用就是回调某个类中的方法。

例如我们在HelloWorld中声明一个backHome的方法

void backHome();

然后实现这个方法

void HelloWorld::backHome{

CCLog("backHome");

}

下面我们创建一个动作moveToHome,并将这个动作与callFunc组合

CCMoveTo * moveToHome =CCMoveTo::create(5.0f,ccp(200,200));

CCCallFunc * callFunc=CCCallFunc::create(this, callfunc_selector(HelloWorld::backHome));

CCSequence * action=CCSequence::create(moveToHome,callFunc,NULL);

spirte->runAction(action);

此时精灵执行完移动的动作之后,会调用backHome方法,在控制台输出backHome。

分享到:
评论

相关推荐

    Cocos2D-X开发学习笔记-动作类之基础动作的使用示例(下)

    Cocos2D-X开发学习笔记-动作类之基础动作的使用示例(下) 教程地址:http://blog.csdn.net/yangyu20121224/article/details/9840757

    Cocos2D-X游戏开发技术精解

    第1章 Cocos2D-X引擎的介绍 1 1.1 何为游戏引擎 1 1.1.1 游戏的核心—引擎 1 1.1.2 引擎的特点 2 1.1.3 知名的引擎介绍 4 1.1.4 引擎的分类 5 1.2 Cocos2D-X引擎的来历 8 1.3 引擎的版本 9 1.4 下载与安装 10 1.5 ...

    cocos2d-x Action使用

    cocos2d-x Action类及动作回调函数的使用,适合初学者。

    cocos2d-x游戏开发之旅

    钟迪龙所著的《Cocos2d-x游戏开发之旅(附光盘)》介绍Cocos2d-x的基础知识:基本知识、基本结构、控件、动作以及屏幕触摸事件的使用。介绍Cocos2d-x更高阶的内容,包括渲染效率的提高、动画、TexturePacker图片打包、...

    Cocos2d-x实战 C++卷,完整扫描版

    本书共29章,按内容结构可分为六篇: 第一篇开发基础,即第2章~第8章,内容包括Cocos2d-x简介、环境搭建、字符串、标签、菜单、精灵、场景、层、动作、特效、动画和Cocos2d-x用户事件。 第二篇开发进阶,即第9章~...

    Cocos2d-x横版动作手游完整源码Source

    Cocos2d-x横版动作手游完整源码Source

    Cocos2d-x高级开发教程(最新)

    《cocos2d-x高级开发教程:制作自己的[捕鱼达人]》以《捕鱼达人》游戏为案例,全面系统地讲解了cocos2d-x 的功能与特性,以及进行游戏开发的基本思路,包括游戏框架的搭建、基本游戏元素的使用、动作、音乐与音效、...

    Cocos2d x手机游戏开发与项目实战详解.part3

     第五章主要介绍Cocos2d-x核心技术,这里包括Cocos2d-x的核心类CCDirector、CCScene、CCNode、CCLayer、CCSprite、CCAction等,通过案例来介绍Cocos2d-x的场景、图层、交互、动作、动画、粒子效果、游戏地图、物理...

    cocos2d-x游戏实例-简易动作游戏

    cocos2d-x游戏实例-简易动作游戏,详见我的csdn博客http://blog.csdn.net/bill_man

    Cocos2D-X开发学习笔记-动作管理类的使用示例

    Cocos2D-X开发学习笔记-动作管理类的使用示例 教程地址:http://blog.csdn.net/yangyu20121224/article/details/10007849

    cocos2d-x学习笔记(7)--动作(Actions).rar

    cocos2d-x学习笔记(7)--动作(Actions).rar

    cocos2d-x横版ACT动作手游《火影快打》完整源码

    cocos2d-x横版ACT动作手游《火影快打》完整源码一款超赞的横版ACT手游,vs2010+cocos2d-x-2.2.2开发,程序用c++,做手游的朋友注意了

    cocos2d-x 仿马里奥小游戏

    cocos2d-x写的,有完善的物理碰撞检测机制

    cocos2d-x简易动作游戏源码

    cocos2d-x简易动作游戏源代码,讲解请关注我的博客 博客地址:http://blog.csdn.net/bill_man

    Cocos2D-X开发学习笔记-动作类之摄像机动作和基本样条动作的使用示例

    Cocos2D-X开发学习笔记-动作类之摄像机动作和基本样条动作的使用示例 教程地址:http://blog.csdn.net/yangyu20121224/article/details/9851099

    cocos2d-x 游戏实例源码打包

    cocos2d-x游戏实例源码打包,包含多个游戏实例:萝莉快跑、瞄汪战争、动作游戏、纵版射击游戏、飞行游戏、蜘蛛人等多个源代码例子。

    Coco2d-x使用教程

    ActionTimeline动画的使用,二、修改动画,关键帧事件,创建多个Node对象,异步加载动画Armature,创建动画并显示,设置骨骼动画的速度,批量添加怪物,实现动画的事件...在场景中获取粒子效果等等COCOS2D-X使用教程尽在其中

    Cocos2d-html5-v2.0

    是由object-C移植而来的JavaScript版本。 主要功能:  流程控制(Flow control):非常容易地管理不同场景(scenes)之间的流程控制  ...http://article.ityran.com/archives/tag/cocos2d-html5系列教程

    cocos2d-x帧动画播放器

    cocos2d-x 上面用的一个帧动画播放器类 用系统的动作播放动画总感觉不自在,所以自己写了一个,给需要的朋友用用吧。 主要功能: 1:普通动画播放 2:聚合多个动画 3:制定停留哪一个动画的哪一帧 4:停止,继续播放,...

Global site tag (gtag.js) - Google Analytics