菜鸟学习Cocos2d-x 3.x——浅谈动作Action
浅谈ios游戏开发之CCAction
浅谈ios游戏开发之CCAction摘要:在ios游戏开发中,目前最为流行的是游戏开发引擎cocos2d-x,它是一种开源、跨平台的免费2D游戏开发引擎。
在cocos2d-x引擎中动作定义了各个节点或精灵之间的移动效果,比如动态效果、跳跃效果、旋转效果等,每一个效果都是一个CCAction动作。
CCAction动作主要分为瞬时动作CCActionInstanse和延时动作CCActionInterval。
关键词:ios游戏;cocos2d-x;CCAction“动作”在生活中的含义人人皆知,那么在cocos2d-x引擎中,“动作”的含义也十分类似,它是指在CCNode节点上运行某些具有目的的行为,比如移动、缩放、跳跃、染色、贝赛尔曲线等行为。
无论是菜单CCMenu、图层CCLayer、还是标签CCLabel、图片精灵CCSprite,只要是CCNode的子类,都可以实现CCAction,动作是作用在某个CCNode上的变化逻辑,通过动作可以非常方便地实现对节点的位置、大小、缩放、扭曲、显示等属性进行调整,也可以实现对节点操作的各种逻辑处理,通过CCNode上执行runAction方法,就可以实现动作的执行,不仅可以完成一个独立的动作,也可以定义动作序列、组合序列、反向动作等,这让开发者在控制CCNode节点时易如反掌。
一、CCFiniteTimeAction动作基类CCAction继承的是CCObject类,并且CCFiniteTimeAction(有限次动作执行类)、CCFlow(节点跟随类)、CCSpeed(节点执行速度类)三个大类都继承的是基类CCAction。
CCFiniteTimeAction(有限次动作执行类)又可分为瞬时动作CCActionInstant和延时动作CCActionInterval两个子类。
其中,瞬时动作CCActionInstant表示动作没有执行过程,动作在瞬间完成,这中间不产生任何动画效果。
cocos2d-x初探学习笔记(3)--动作(CCAction)
cocos2d-x初探学习笔记(3)--动作(CCAction)1.内存自动回收Cocos2d—x提供了一种类似java的内存回收机制,,在java中定义的对象实例,不用担心他什么时候被释放,因为java虚拟机会在变量不再使用时自动释放内存,而在C++中,不再使用这个变量时,我们需要手动释放(使用delete),不然我们的内存就会溢出,而在使用cocos2d-x时我们无需再关心这个问题,就是在新创建实例时,加入autorelease,如图所示:这样就可以自动释放不再需要的内存了.2.动作(CCAction)在cocos2d-x引擎中,动作定义了在节点上进行通用的操作,他不依赖于节点,但是运行时需要指定节点作为目标,动作可以实现很多动画效果动作分为瞬时动作(基类CCActionInstanse)和延时动作(基类CCActionInterval),实现动作包括几个步骤:1.创建目标节点(一般是精灵)m_grossini = CCSprite::spriteWithFile(s_pPathGrossini);2.定义动作CCActionInterval* actionTo = CCMoveTo::actionWithDuration(2, CCPointMake (s.width-40, s.height-40));3.动作执行m_grossini->runAction( CCSequence::actions(actionBy, actionByBack, NULL)); 以下就通过test中的几个例子来分析动作1.直接设置(这个不算动作动画)这个没什么好说的,就是直接设置位置,颜色,缩放度等内容,动作执行没有过程,直接看到结果2.动作返回其中reverse就是执行动作的反动作,回到原来的状态3.消息机制cocos2d-x也采用了消息机制,如上图中代码所示,在完成动作后调用相应函数。
菜鸟学习Cocos2d-x-3.x——浅谈动作Action
菜鸟学习Cocos2d-x 3.x——浅谈动作Action动作类概述一款游戏,设计的再NB的游戏,如果都是一堆静态的图片,没有任何动作,那也只能“呵呵”了。
动作体系对于一款游戏的成功与否,有着非常重要的影响。
所以,这篇文章就对Cocos2d-x中的动作进行总结。
先来看看Cocos2d-x中的与动作相关的类。
与动作相关的类图如下图所示:现在就对这些类进行简单的介绍,在后续的小节中还会进行详细的分析的。
•Ref和Clonable:这里不说,在总结Cocos2d-x内存管理的时候再进行详细总结;•Action:所有动作的父类,定义了公共的操作;•FiniteTimeAction:瞬时动作和延时动作的父类,可以定义动作的时间变化;•Follow:跟随节点的动作;•Speed:改变一个动作的时间,比如实现慢动作回放或者快进;•ActionInstant:瞬间完成动作,中间没有任何动画效果;•ActionInterval:动作会在指定的时间内完成,中间会有动画效果;•FlipX:X轴方向翻转;•MoveTo:移动动作;•……下面就对上面说的这些类进行通过实际的代码进行总结。
Action类的主要成员函数以下是Action类的主要成员函数:/*** 返回一个新的Action对象,表示原动作的相反的动作*/virtual Action* reverse()const=0;// 如果动作已经完成了,就返回truevirtual bool isDone()const;// 在动作开始之前被调用,设置动作作用的对象virtual void startWithTarget(Node*target);/*** 在动作完成以后会被调用,它会设置"target"对象为空* 注:请永远不要手动调用该函数,而是调用对应的"target->stopAction(a ction);"*/virtual void stop();/*** 每帧都会调用的方法,如果你需要在每帧控制动作,则需要重写,时间间隔为动作间隔时间* 最好不要重写该函数,除非你真的知道怎么做*/virtual void step(float dt);/*** 每一帧都会调用一次该函数,参数time取值为0和1之间的任意值,例如:* 0表示动作刚刚开始的时候调用;* 0.5表示动作执行到一半的时候调用;* 1表示动作完成以后调用;*/virtual void update(float time);// 获得执行动作的对象inline Node* getTarget()const{return _target;}// 设置执行动作的对象inline void setTarget(Node*target){ _target = target;}// 动作标签inline int getTag()const{return _tag;}inline void setTag(int tag){ _tag = tag;}瞬时动作ActionInstant是瞬时动作类。
coco2d-x面试题(无脑码农)
Cocos2d-x面试题(无脑码农)1,阐述cocos2d-x 中CCScene CCLayer CCSprite CCNodeCCScene:CCScene是app工作流程上独立块,一个app可能拥有多个scene,但是在任何时候只能有一个是激活状态的。
一个CCScene对象由一个或多个CCLayer组成,layer之间是前后相连的。
Layer提供了scene的外观和行为。
通常的用法是直接用一个或多个layer实例化一个scene CCScene的子类CCTrasitionScene实现移动transitions,提供两个scene之间的转移效果,由于scene是CCNode的子类,所以scene可以手工或者用aciton来转变坐标。
所有层和精灵都是他的(子节点)children。
CCScene的4个基本方法:runWithScene(运行画面),replaceScene(替换场景例如从主菜单进入游戏界面),《pushScene(暂停界面),popScene(从暂停的界面还原到游戏界面)Layers:CCLayer同样是CCNode的子类,通常用addChild方法添加子节点。
CCLayer对象定义了可描绘的区域,定义了描绘的规则。
CCLayer可以实现半透明的效果,层的事件相应机制: 最外层最先接受到事件(屏幕触碰),最后是底层,如果在某层处理了该事件,则后面的层不会在接受到事件信号Spritescocos2d的sprite对象就是一个可以移动、选择、伸缩、动画的2d图形,CCSprite 对象的子成员中可以包含其它的CCSprite 对象。
当CCSprite 对象转换坐标系的时候,它所包含的CCSprite 对象也会转换转换坐标系。
sprites 是CCNode 的子类, 所以他们也可以使用actions来转换坐标. See Actions for more detail about actions.CCNode是场景、层、菜单、精灵等所有节点的父类,它是一个抽象类,没有可视化表示形式,定义了所有node共有的属性和方法。
游戏开发平台Cocos2D-x中的动作特效与动画
以上分别定义了CCScaleTo和CCScaleBy的实例。之前已经说过CCScaleBy是CCScaleTo的子类, CCScaleTo是缩放到相应比例,CCScaleBy是在目前基础上变化相应的缩放比例。create函数可以使用两个 参数或者三个参数。两个参数的第一个参数是时间间隔,第二个参数是缩放比例。三个参数的第一个参数是 时间间隔,第二个参数是x轴缩放比例,第三个参数是y轴缩放比例。
2019/3/8
xxxxxxxxxx
6
缩放动作
Void ActionScale::onEnter(){ ActionsDemo::onEnter(); centerSprites(3); CCActionlnterval*actionTo=CCScaleTo::create(2.Of,0.5f); CCActionlnterval*actionBy=CCScaleBy::create(2.Of/l.Of,lO.Of); CCActionlnterval*actionBy2=CCScaleBy::create(2.Of,5.Of,l.Of}; m_grossini->runAction(actionTo); m_tamara->runAction(CCSequence::create(actionBy,actionBy->reverse(),NULL)); m_kathia->runAction(CCSequence::create(actionBy2,actionBy2->reverse(),NULL)); }
Cocos2d-x游戏开发标准教程第02章 Cocos2d-x基础
说明
水平翻转精灵,参数flippedX为true 表示翻转,为false表示不翻转
void setFlippedY(bool flippedY) bool isFlippedX()
bool isFlippedY()
第15页
垂直翻转精灵,参数flippedY为true 表示翻转,为false表示不翻转 是否水平翻转了精灵
第12页
2.2精灵类 2.2.1 基础知识 精灵类的继承关系
第13页
2.2精灵类
2.2.1 基础知识 创建精灵的常用方法 方法签名 static Sprite* create()
说明 创建一个精灵对象,并返回其指针 创建一个精灵对象,并返回其指针, 参数filename表示精灵对应的图片 文件路径 创建一个精灵对象,并返回其指针, 参数filename表示精灵对应的图片 文件路径,参数rect表示精灵的有 效内容在图片中所占的矩形区域
static Sprite* create (const std::string& filename)
static Sprite* create(const std::string& filename, const Rect& rect)
第14页
2.2精灵类
2.2.1 基础知识 精灵类的翻转方法
方法签名
第17页
2.2精灵类
2.2.3 开发过程 (4)完成了APPDelegate类中方法的实现后,下面需要进行 案例中场景管理类SpriteSceneManager的开发,首先要引入 头文件,然后声明SpriteSceneManager类,其次创建场景对 象的createScene方法。 (5)开发完场景管理类SpriteSceneManager的框架声明后, 还要真正地实现SpriteSceneManager类中的方法,主要是创 建场景对象的createScene方法,其中还创建了场景与布景对 象,并将布景对象添加到了场景中。 (6)完成了SpriteSceneManager类中方法的实现后,下一步 需要进行案例中布景类SpriteLayer的开发,其中还声明了布景 的初始化方法init方法。
Cocos2d-x入门教程(详细的实例和讲解)
Cocos2d-x⼊门教程(详细的实例和讲解)智能终端上的游戏⽬前风头正劲,试问哪个智能⼿机上没有⼏款企鹅公司出品的游戏呢!之前从未涉猎过游戏开发,但知道游戏开发前要挑选⼀款合适的游戏引擎,⾃⼰从头开始敲代码的时代已经out了。
在寻觅游戏引擎之前,我需要回答三道摆在我⾯前的选择题:1、2D引擎还是3D引擎?2、平台专⽤引擎还是跨平台引擎?3、收费引擎还是开源引擎?作为⼊门级选⼿,2D游戏显然更适合上⼿⼀些,另外适合果果这个年龄段的幼教类的游戏也多以2D游戏居多。
3D游戏本⾝也太难了,不仅要 Programming能⼒,还要3D建模能⼒,这些学习起来周期就太长了;⼀直是Ubuntu Fans,⼿头没有Mac Book,这样开发iOS程序变成⼀件糟⼼的事,在Ubuntu下搭建iOS App开发环境繁杂的很,即便是虚拟机也懒得尝试。
但从游戏体验来看,还是在iPad上玩更好⼀些,因此最好引擎能跨平台,以便后续迁移到iOS上;开源和⽤开源惯了,收费的引擎⽬前不在考虑范围之内。
综上,我要寻找的是⼀款开源的、跨平台的Mobile 2D Game Engine。
于是我找到了Cocos2d-x!Cocos2d-x是Cocos2d-iphone的C++跨平台分⽀,由于是国⼈创⽴的,在国内有着较⼤的⽤户群,引擎资料也较多,社区⼗分活跃。
国内已经出版了多本有关Cocos2d-x的中⽂书籍,⽐如《Cocos2d-x⾼级开发教程:制作⾃⼰的 “捕鱼达⼈”》、《Cocos2d-x权威指南》等都还不错。
更重要的是Cocos2d-x⾃带了丰富的例⼦,供初学者“临摹学习”,其中cocos2d-x-2.2.2/samples/Cpp /TestCpp这个例⼦⼏乎涵盖了该引擎的绝⼤多数功能。
下⾯就开启Cocos2d-x的⼊门之旅(For Android)。
试验环境:复制代码代码如下:Ubuntu 12.04.1 x86_64gcc 4.6.3javac 1.7.0_21java "1.7.0_21" HotSpot 64-bit Server VMadt-bundle-linux-x86_64-20131030.zipandroid-ndk-r9d-linux-x86_64.tar.bz2Cocos2d-x官⽹⽬前提供2.2.2稳定版以及3.0beta2版的下载(当然你也可以下载到更⽼的版本)。
cocos2d-x学习笔记:简单动画
cocos2d-x学习笔记:简单动画需要说明的是:因为cocos2d-x是通用游戏引擎,为了保证兼容性和易用性,对动画机制作了最简单的设计(被做成了一个action)。
但代价就是绘制动画的代码可能比较多,如果在实际开发中,一般都要选择自己封装。
这里只给出最基本的动画代码,具体使用要根据实际情况自己封装。
最好自己开发一个编辑器。
额外说一句,开发编辑器最好使用Qt,因为是跨平台的。
我们随便找一张动画资源图片,在66RPG里有很多。
#1 动画代码1CCSize s = CCDirector::sharedDirector()->getWinSize();23//#1:生成动画需要的数据类4CCTexture2D*texture=CCTextureCache::sharedTextureCache()->addImage("pic2476.png");5CCSpriteFrame *frame0=CCSpriteFrame::frameWithTexture(texture,CCRectMake(32*0, 48*0, 32, 48));6CCSpriteFrame *frame1=CCSpriteFrame::frameWithTexture(texture,CCRectMake(32*1, 48*0, 32, 48));7CCSpriteFrame *frame2=CCSpriteFrame::frameWithTexture(texture,CCRectMake(32*2, 48*0, 32, 48));8CCSpriteFrame *frame3=CCSpriteFrame::frameWithTexture(texture,CCRectMake(32*3, 48*0, 32, 48));910CCMutableArray<CCSpriteFrame*> *animFrames = new CCMutableArray<CCSpriteFrame*>(4);11animFrames->addObject(frame0);12animFrames->addObject(frame1);13animFrames->addObject(frame2);14animFrames->addObject(frame3);1516CCAnimation *animation = CCAnimation::animationWithFrames(animFrames, 0.2f);17animFrames->release();18//#2:初始化并设置Sprite19CCSprite *sprite = CCSprite::spriteWithSpriteFrame(frame0);//设置一个初始frame 20sprite->setPosition( ccp( s.width/2, s.height/2) );21addChild(sprite);2223//#3:使用animation生成一个动画动作animate24CCAnimate *animate = CCAnimate::actionWithAnimation(animation, false);25sprite->runAction(CCRepeatForever::actionWithAction(animate));//重复播放注意,cocos2dx不支持使用clip的动画,另外,clip动画的开发成本很高,在智能手机这种大内存的平台是否适用(牺牲内存换开发速度么?),值得商量。
Cocos2d-x游戏开发标准教程第03章 动作特效与场景切换特效
第1页
3.1 基础动作特效
3.1.1 背景知识
Cocos2d-x 游戏引擎在设计时充分考虑到了动作特效的作用,引擎 内内置了很多常用动作特效的实现类。本节将会介绍基础动作特效, 常用基础动作特效如下所列。
第2页
爆炸特效、瓦片消失特效。 切开行特效、切开列特效。 顶右淡出特效、底左淡出特效、向上淡出特效、向下淡出特效。 可扭曲波浪特效、旋转扭曲特效。
第3页
3.1 基础动作特效 3.1.2 爆炸特效
第4页
3.1 基础动作特效 3.1.3 瓦片消失特效
瓦片消失特效一般用于游戏中精灵需要瓦片逐渐消失的情况。比如格斗游戏
中失败阵亡的英雄逐渐消失、游戏切换场景时一个场景呈瓦片逐渐消失、玩 家控制的英雄从当前场景瓦片消失进入下一个场景等都使用了瓦片消失特效。 瓦片消失特效在Cocos2d-x中由TuranOffTiles类实现,对于开发人员而言此 类最重要的就是静态的create方法,其方法签名如下。 1 satic TurnOffTiles*create(float duration, const Size& gridSize) //瓦片消失方法 dration参数表示发生一次瓦片消失动作所需要时间,是一个以秒为单位的值。 gridSize参数表示为实现特效切分网格的尺寸。
第12页
3.1 基础动作特效 3.1.6可扭曲波浪、旋转扭曲特效
1 static Waves*create(float duration, const Size& gridSize, unsigned int waves, float amplitude, 2 bool horizontal, bool vertical) //可扭曲波浪方法 3 static Twirl*create(float duration, const Size& gridSize, Vec2 position, unsigned int twirls, 4 float amplitude) //旋转扭曲方法 本小节两个方法中,duration 参数表示发生一次动作所需要的时间,是一个以秒为单位的值,gridSize参 数表示为实现特效切分网格的尺寸,waves参数表示波浪数,amplitude参数表示扭曲波浪波的振幅,此 参数值越大振动越剧烈,此参数值越小振动越微弱。 可扭曲波浪方法中horizontal参数为布尔型,表示水平方向是否发生扭曲,true表示水平方向发生扭曲, false表示水平方向不发生扭曲,vertical参数为布尔型,表示垂直方向是否发生扭曲,true表示垂直方向 发生扭曲,false表示垂直方向不发生扭曲。 旋转扭曲方法中position参数表示获取漩涡的中心位置,twirls参数表示漩涡的数量,amplitude参数表示 漩涡扭曲程度。
【Cocos2d入门教程二】Cocos2d-x基础篇
【Cocos2d⼊门教程⼆】Cocos2d-x基础篇上⼀章已经学习了环境的搭建。
这⼀章对基础概念进⾏掌握。
内容⼤概有:1.导演2.场景3.节点4.层4.精灵1.导演(Director)导演存在的主要作⽤:a.环境设定(帧率初始化openGl和渲染器)b.场景管理c.执⾏主循环游戏就是个死循环不断不断的渲染就跟视频没两样⼀帧⼀帧的绘制出来话说提⼀下⼀帧为1/60秒也就是说cocos2d⾥⼀秒渲染60次导演的管理: 计时器事件管理器动作管理器导演继承于REF 本质上就是⼀个单例类获得导演类Director实例语句1 auto director = Director :: getInstance();1//调⽤第⼀个场景,当前不能有场景运⾏2void runWithScene(CCScene *pScene);34//场景⼊栈,当前必须有场景5void pushScene(CCScene *pScene);67//场景出栈,删除当前场景,当前必须有场景8void popScene(void);910//弹出所有场景,直⾄根场景11void popToRootScene(void);1213//弹出⾄指定场景14void popToSceneStackLevel(int level);1516//⽤新场景替代旧场景17void replaceScene(CCScene *pScene);1819//结束运⾏,释放场景,必须⼿动调⽤20void end(void);2122//暂停场景23void pause(void);2.场景(Scene)Scene场景也是cocos2dx中必不可少的元素,游戏中通常我们需要构建不同的场景(⾄少⼀个),游戏⾥关卡、版块的切换也就是⼀个⼀个场景的切换,就像在电影中变换舞台和场地⼀样。
场景的⼀个重要的作⽤就是流程控制的作⽤,我们可以通过Director的⼀系列⽅法控制游戏中不同的场景的⾃由切换。
Cocos2d-3.xAction介绍
Cocos2d-3.xAction介绍我们在做游戏的时候,或是我们在玩游戏的时候有以下⼏点我认为是⾮常重要的1.游戏效果2.游戏的画风3.游戏耐玩性其中游戏的效果有⼀个很重要的要素,这⾥就包含游戏中⼈物的动作(Action)。
有时候我们说这个游戏这个技能真帅啊,这指的有两点,技能的效果帅和动作帅。
下⾯我领⼤家来看看官⽅的Demo⼀、下载解压官⽅的框架⼆、我们运⾏⼀下官⽅的例⼦我们最好卸载掉⼀些别的⼯程,加快我们的编译速度,C++编译速度很慢的三、打开我们的官⽅例⼦代码如下,已经加上了注释//------------------------------------------------------------------//// Test1////------------------------------------------------------------------void CrashTest::onEnter(){ActionManagerTest::onEnter();//创建精灵 s_pathGrossini是什么呢?static const char s_pathGrossini= "Images/grossini.png"; auto child = Sprite::create(s_pathGrossini);//设置到屏幕中⼼点child->setPosition( VisibleRect::center() );//添加的逻辑必须/*** 添加⼀个child(带有z order和tag)到⼀个容器⾥**如果这个child是被添加到⼀个运⾏中的节点,然后onEnter和onEnterTransitionDidFinish将会被调⽤ * @param child ⼀个child 节点.* @param localZOrder Z order 是为了描画的顺序的* @param tag ⼀个整形很容易确定节点.*/addChild(child, 1, kTagGrossini);//Sum of all action's duration is 1.5 second.//旋转 90度,持续1.5秒child->runAction(RotateBy::create(1.5f, 90));//DelayTime这个参数是推迟这个动作 1.4秒//FadeOut淡出 1.1秒child->runAction(Sequence::create(DelayTime::create(1.4f),FadeOut::create(1.1f),nullptr));//1.5秒后将会移除这个动作child->runAction(Sequence::create(DelayTime::create(1.4f),CallFunc::create(CC_CALLBACK_0(CrashTest::removeThis, this)),nullptr));}void CrashTest::removeThis(){//通过Tag号获取了节点auto child = getChildByTag(kTagGrossini);//将节点删除child->removeChild(child, true);//运⾏下⼀个例⼦getTestSuite()->enterNextTest();}std::string CrashTest::subtitle() const{return "Test 1. Should not crash";}//------------------------------------------------------------------//// Test2////------------------------------------------------------------------void LogicTest::onEnter(){ActionManagerTest::onEnter();//创建精灵auto grossini = Sprite::create(s_pathGrossini);//将精灵加到层上addChild(grossini, 0, 2);//添加到中⼼点grossini->setPosition(VisibleRect::center());//移动到(150,0)点,时间为5秒//CC_CALLBACK_1(LogicTest::bugMe,this) 五秒之后调⽤的函数grossini->runAction( Sequence::create(MoveBy::create(5, Vec2(150,0)),CallFuncN::create(CC_CALLBACK_1(LogicTest::bugMe,this)),nullptr));}void LogicTest::bugMe(Node* node){node->stopAllActions(); //After this stop next action not working, if remove this stop everything is workingnode->runAction(ScaleTo::create(2, 2));//放⼤倍x和y轴,也就是图⽚放⼤2倍}四、我领着⼤家看看效果吧,我特意放慢了速度 Test1Test2五、总结对于Demo的Action总结1.创建精灵2.加载精灵到层上3.创建动作4. 精灵调⽤runAction 传递⼀个动作的参数学习⽅法之我的建议1. 我们在学习cocos2d的时候,遇到不会的⽅法可以去看看框架中的注释 3.搜索⼀些博客,然后看看继承图。
Cocos2d-x3.x入门教程(一):基础概念
Cocos2d-x3.x⼊门教程(⼀):基础概念前⾔接触游戏开发时间不长,之前⼀直都是写Lua,写Lua肯定是没有什么发展的啦,⾄少你要会写的。
写客户端,肯定要看看Cocos2d-x了。
从今天起,正式开始Cocos2d-X的学习之旅。
之前⼀直都是做C++开发的,转过来看Cocos2d-x,从语⾔上来说,没有多少问题。
对于我来说,Cocos2d-x就是⼀个类库,就类似于MFC、ATL和QT⼀样,就是⼀个游戏类库,⽽我就按照学习类库使⽤的⽅法去学习Cocos2d-x。
这篇⽂章叫基础概念,但是还是从整体来说说Cocos2d-x这个类库的。
基础架构在Cocos2d-x中,主要的概念包括Director、Scene、Layer和Sprite这⼏个重要的概念,它们之间的关系如下。
这幅结构图是⾮常重要的,在以后的开发过程中,基本也就是基于这个结构图来理清项⽬结构了。
Cocos2d-x就是这样的管理着不同的对象,然后组成⼀个个完美的、⽉流⽔上亿的项⽬,有些事情就是这样。
Director(导演)Director控制着整个游戏,会经常进⾏⼀些调度控制;在Cocos2d-x 3.x中,Director使⽤的是单例模式,在整个游戏运⾏期间,它就只有⼀个实例。
Director是整个Cocos2d-x 3.x的核⼼,是整个游戏的导航仪,在游戏中,⼀般由Director来完成以下操作的控制:1.OpenGL ES的初始化;2.场景的转换;3.游戏的暂停、继续的控制;4.世界坐标和GL坐标之间的切换;5.对节点的控制;6.保存和调⽤保存的游戏数据;7.屏幕尺⼨的获取,等等。
Scene(场景)Scene场景是Cocos2d-x 3.x中必不可少的元素,游戏中我们需要构建不同的场景(⾄少⼀个),游戏⾥关卡、板块的切换就是⼀个个场景之间的切换。
场景的⼀个重要的作⽤就是流程控制的作⽤,我们可以通过Director的⼀系列⽅法控制游戏中不同的场景的⾃由切换。
Cocos2d-x学习笔记(三)浅析动作类CCAction(2)
Cocos2d-x学习笔记(三)浅析动作类CCAction(2)有关CCAction其它动作类简介:(1)摄像机动作类CCOrbitCamera:摄像机动作是环绕中心屏幕旋转所形成的动作,其旋转坐标采用球坐标描述。
Create()函数原型CCOrbitCamera* create (float,float,float,float,float,float,float),第一个参数表示时间间隔,第二、三个参数分别表示起始半径和过程半径,第四、五个参数分别表示起始Z轴夹角和过程Z轴夹角,第六、七个参数分别表示起始X 轴夹角和过程X轴夹角。
(2)基本样条动作:CCCatmullRomTo(By)和CCCardinalSplineT o(By)游戏对象通过一些离散的点模拟出相应的路径,有相应的公式模拟出这条曲线,那就是基本样条了。
1、基本样条路径CCCardinalSplineTo(By):Create()函数原型CCCardinalSplineT o* crete(float,CCPointArray*,float),第一个参数表示时间间隔,第二个参数表示点数组,第三个参数表示拉力系数。
前面说过,一个是相对量,一个是绝对量,注意使用相对量时应第一个点最好设置为(0,0),否则会被忽略掉。
2、Catmull-Rom样条路径CCCatmullRomTo(By),用法类似,只是不需要拉力系数做参数。
(3)缓冲动作类CCActionEase:在现实运动中,常常需要实现一些加减速效果,缓冲动作可以帮我们实现。
主要有指数缓冲、赛因缓冲、跳跃缓冲、弹性缓冲、回震缓冲和基本缓冲六大类。
一般第一个参数为缓冲动作,若有2个参数,基本动作的第二个参数为速率,弹性缓冲为震动周期。
其基本调用形式为(CCActionInterval*)(move->copy()->autorelease()……)。
(4)组合动作类CCSequence、CCSpawn和CCRepeat、CCrepeatForever:在游戏中,游戏对象有时不只是执行一个动作执行多个动作的动作序列,这时需要用动作组合在一起,用组合动作类可以实现它。
Cocos2d-x开发action动作总结
1.基本动作Cocos2d提供的基本动作:瞬时动作、延时动作、运作速度。
瞬时动作:就是不需要时间,马上就完成的动作。
瞬时动作的共同基类是 InstantAction。
Cocos2d提供以下瞬时动作:∙放置– Place效果类似于 node.Position = ccp(x, y)。
之所以作为一个动作来实现是为了可以与其他动作形成一个连续动作。
∙隐藏– Hide效果类似于 [node setVisible:NO]. 之所以作为一个劢作来实现是为了可以与其他动作形成一个连续动作。
∙显示– Show效果类似于 [node setVisible:YES]. 之所以作为一个动作来实现是为了可以与其他动作形成一个连续动作。
∙可见切换– ToggleVisibility2.延时动作延时动作就是指动作的完成需要一定时间。
因此actionWithDuration 是延时动作执行时的第一个参数,延时动作的共同基类是 CCIntervalAction(包含了组合动作类)。
Cocos2d提供以下瞬时动作(函数命名规则是:XxxxTo: 意味着运动到指定的位置, XxxxBy:意味着运动到按照指定的 x、y 增量的位置。
[x、y 可以是负值]):∙移动到– CCMoveTo∙移动– CCMoveBy∙跳跃到– CCJumpTo 设置终点位置和跳跃的高度和次数。
∙跳跃– CCJumpBy 设置终点位置和跳跃的高度和次数。
∙贝塞尔– CCBezierBy 支持 3 次贝塞尔曲线:P0-起点,P1-起点切线方向,P2-终点切线方向,P3-终点。
∙放大到– CCScaleTo 设置放大倍数,是浮点型。
∙放大– CCScaleBy∙旋转到– CCRotateTo∙旋转– CCRotateBy∙闪烁– CCBlink 设定闪烁次数∙色调变化到– CCTintTo∙色调变换– CCTintBy∙变暗到– CCFadeTo∙由无变亮– CCFadeIn∙由亮变无– CCFadeOut3.组合动作按照一定的次序将上述基本动作组合起来,形成连贯的一套组合动作。
cocos2d-x学习方法之CCAction
cocos2d-x学习笔记-CCAction(动作);上一篇我们学习了CCNode类(实体),但游戏单单只有静止不动的实体肯定不行,得让它们执行一些动作,有丰富的动画效果,CCAction及它的子类就是起着这样的作用,它是通过改变这些实体的属性实现的。
从结构图可以看出,动作类的基类是CCAction,通过继承它可以实现很多种动作。
CCFiniteTimeAction:有限次动作执行类,就是按时间顺序执行一系列动作,执行完后动作结束;CCSpeed:调整实体(节点)的执行速度;CCFollow:可以使节点跟随指定的另一个节点移动。
下面我们主要来学习CCFiniteTimeAction,这个类在平常的开发中很常见。
CCFiniteTimeAction又分为CCActionInstanse(瞬时动作的基类)和CCActionInterval(延时动作的基类)。
CCActionInstanse:没什么特别,跟CCActionInterval主要区别是没有执行过程,动作瞬间就执行完成了;CCActionInterval:执行需要一定的时间(或者说一个过程)。
我们用的最多的就是延时动作,下面对它进行单独介绍。
根据上面的类结构图,CCActionInterval的子类有很多,可以通过cocos2d-x自带的tests 例子来学习,主要有这些动作:移动(CCMoveTo/CCMoveBy)、缩放(CCScaleTo/CCScaleBy)、旋转(CCRotateTO/CCRotateBy)、扭曲(CCSkewTo/CCSkewBy)、跳跃(CCJumpTo/CCJumpBy)、贝塞尔曲线(CCBezierTo/CCBezierBy)、闪烁(CCBink)、淡入淡出(CCFadeIn/CCFadeOut)、染色(CCTintTo/CCTintBy)等,还可以把上面这些动作的几个组合成一个序列。
下面是移动和缩放动作的代码示例,其他的动作都类似,都是调用actionWithDuration函数,用到的时候具体参数的含义可以参考cocos2d-x自带的tests例子。
51CTO学院-从零开始掌握Cocos2d-x 3.x视频教程第4季__标签和菜单
从零开始掌握Cocos2d-x 3.x视频教程第4季__标签和菜单课程目标让学员掌握标签和菜单的使用方法。
适用人群任何对cocos2d-x感兴趣的学员课程简介本套教程的目标是让Cocos2d-x初学者快速掌握Cocos2d-x 3.0的基本开发技术(包括开发环境的搭建、Director、Node、Scene、Layer等,这些技术都是开发游戏必备的技术。
并且可以利用本套教程讲解的技术实现一个射击类游戏:星空大战。
对本套教程感兴趣的学员可以加入QQ群:264268059购买本课程的学员请加入付费学员群:221665034 加入时需要提供51CTO账号加入时请阐明主要使用的游戏开发技术,如Cocos2d-x、Unity 3D等。
适合对象:∙想从事游戏开发,但从没有接触过游戏开发的程序员。
∙以前开发过游戏,但从没使用过跨平台开发引擎Cocos2d-x的程序员。
∙以前使用过Cocos2d-x 1.x或Cocos2d-x 2.x,但希望学习Cocos2d-x 3.0的程序员。
∙所有对游戏开发有着浓厚兴趣的程序员和非程序员。
学习条件:虽然本课程是Cocos2d-x 3.0的入门课程,但仍然要求学员有一定的知识储备。
基本的要求如下:1.了解Mac OS X、Windows或Linux中至少一个操作系统的基本操作。
2.掌握Eclipse、XCode和Visual Studio 2012/2013中至少一个IDE的基本操作。
3.了解C++的基本开发知识课程1LabelTTF类(使用TTF字体文件)[免费观看]9分钟本讲介绍了如何使用ttf字体文字显示文本,包括旧的LabelTTF类和新的Label类的使用。
2LabelAtlas类(截取图像的标签类)9分钟本讲主要介绍了如何通过LabelAtlas类以及3.0正式版提供的Label::createWithCharMap方法截取带文字的图像的一部分,并进行组合形成要显示的文字的图像,最终将文字显示在屏幕上的方法。
cocos2d-x 学习文档
001:对cocos2d-x项目的初步分析.根据上面的截图可以看出,项目默认分Classes Resources win32三个文件夹。
Classes下存放的是程序的主要源代码,Resources下放的是资源文件,win32目录下的文件是平台相关的,99%的情况下不需求变动。
1)主程序入口打开main.cpp可以看到如下代码#include "main.h"#include "AppDelegate.h"int APIENTRY _tWinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTR lpCmdLine,int nCmdShow){UNREFERENCED_PARAMETER(hPrevInstance);UNREFERENCED_PARAMETER(lpCmdLine);// create the application instanceAppDelegate app;return cocos2d::CCApplication::sharedApplication().run();}看起来是不是有点儿像MFC的CWinApp呢?2)AppDelegate的使用实际上AppDelegate是从CCApplication派生出来的。
作为初学者,目前只需要注意1个成员函数,那就是applicationDidFinishLaunching。
他负责初始化CCDirector并创建第1个CCScene供程序显示。
bool AppDelegate::applicationDidFinishLaunching(){// initialize directorCCDirector *pDirector = CCDirector::sharedDirector();pDirector->setOpenGLView(&CCEGLView::sharedOpenGLView());// enable High Resource Mode(2x, such as iphone4) and maintains low resource on other devices.// pDirector->enableRetinaDisplay(true);// turn on display FPSpDirector->setDisplayFPS(true);// set FPS. the default value is 1.0/60 if you don't call thispDirector->setAnimationInterval(1.0 / 60);// create a scene. it's an autorelease objectCCScene *pScene = HelloWorld::scene();// runpDirector->runWithScene(pScene);return true;}小结:通过本章内容,我们对cocos2d-x引擎有了一个初步的体验,002:landscape or portrait.在cocos2d-x代码中,对设备方向有这样的定义:/** @typedef ccDeviceOrientationPossible device orientationstypedef enum {/// Device oriented vertically, home button on the bottomkCCDeviceOrientationPortrait = 0, // UIDeviceOrientationPortrait,/// Device oriented vertically, home button on the topkCCDeviceOrientationPortraitUpsideDown = 1, // UIDeviceOrientationPortraitUpsideDown,/// Device oriented horizontally, home button on the rightkCCDeviceOrientationLandscapeLeft = 2, // UIDeviceOrientationLandscapeLeft,/// Device oriented horizontally, home button on the leftkCCDeviceOrientationLandscapeRight = 3, // UIDeviceOrientationLandscapeRight,// Backward compatibility stuffCCDeviceOrientationPortrait = kCCDeviceOrientationPortrait,CCDeviceOrientationPortraitUpsideDown = kCCDeviceOrientationPortraitUpsideDown,CCDeviceOrientationLandscapeLeft = kCCDeviceOrientationLandscapeLeft,CCDeviceOrientationLandscapeRight = kCCDeviceOrientationLandscapeRight,} ccDeviceOrientation;根据注释所说,肖像模式是设备为垂直方向的,home键在下方。
Cocos2dX动作Action
动作概述
• 动作类(Action)是所有动作的基类,它创建的一个对象代表 一个动作。动作作用于Node,因此每个动作都需要由 Node对象执行。动作类(Action)作为基类,实际上是一个 接口,动作类的大多数实现类都派生于有限时间动作类 (FiniteTimeAction)。
• 在实际开发中我们通常用到两类动作:即时动作和持续动 作,它们均继承于有限时间动作类。
//旋转动作 var rotation = new cc.RotateTo(2, 180, 0);
//淡入动作 var fade = cc.fadeOut(5);
//Sequence复合动作 var seq = cc.sequence(move, cc.delayTime(2), rotation, fade); e.runAction(seq);
• 动作概述 • 即时动作 • 持续动作 • 复合动作 • 变速动作 • 综合实例
内容
引言
• 动作用于制造各种动态。 • 将一朵云从屏幕左边漂浮移动到右边,可以使用上节学习
的调度器来实现。但如果要实现诸如回合制游戏中控制角 色从当前位置移动到地方阵地,攻击敌方之后再跑回来这 样的效果,使用定时器来实现就非常麻烦。这时动作( Action)来拯救我们了。 • 通过组合,动作可以轻易地完成非常复杂的行为。 • 对界面应用动作,可以创建出炫酷和动感的界面。
变速动作
• 变速动作和复合动作类似,也是一种特殊的动作,它可以把任何动作按照改变后 的速度执行。
• 在游戏中,我们经常要实现一些加速度或者减速度的效果。Cocos2d-x已经为我们 做好了。
• ActionEase类可以实现动作的速度由快到慢、速度随时间改变的匀速运动。该类 包含5类运动:
Cocos2d-x之动作管理与CCActionManager的使用
Cocos2d-x之动作管理与CCActionManager的使用Cocos2d-x之动作管理与CCActionManager的使用一、动作管理类动作管理类CCActionManager是一个管理所有动作的单例,工作原理是:当CCNode执行runAction时,该函数会把动作通过动作管理类的addAction函数将对象传递给CCActionManager的单例,该实例再把这个动作添加到自己的动作序列中。
动作管理单例通过定时刷新自己的update方法,在这个方法中去调用行为序列中每个动作的step(暂停的行为不会update),这些step方法再根据自身的完成进度去update或是结束行为。
实际上是由动作管理单例驱动的每个动作去更新自己的逻辑,而runAction方法只是将行为对象添加进CCActionManager的待执行队列。
当节点被清除或是行为结束时,动作管理类会自动将动作从队列中删除,不需要程序员的管理。
一般情况下,不需要使用这个单例来管理动作,可以使用CCNode类的stopAction、stopActionByTag和stopActions等函数来管理、但是有两种情况需要使用CCActionManager类单例:<1> 动作的执行者不是同一个节点。
<2> 需要暂停/重启活动时。
CCActionManager类的继承关系如下图所示。
61.png二、CCActionManager类的主要函数CCActionManager类的主要函数见如下图所示。
62.png三、CCActionManager类的使用之前提到过,不要轻易使用动作管理类,除非是不同动作目标和需要暂停/重启动作。
这里的例子就是需要暂停/重启动作时使用。
1、项目示例。
<1> 首先新建Cocos2D-X项目,取名为“MyCCActionManager”,然后在HelloWorldScene.h文件中声明成员函数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
菜鸟学习Cocos2d-x 3.x——浅谈动作Action动作类概述一款游戏,设计的再NB的游戏,如果都是一堆静态的图片,没有任何动作,那也只能“呵呵”了。
动作体系对于一款游戏的成功与否,有着非常重要的影响。
所以,这篇文章就对Cocos2d-x中的动作进行总结。
先来看看Cocos2d-x中的与动作相关的类。
与动作相关的类图如下图所示:现在就对这些类进行简单的介绍,在后续的小节中还会进行详细的分析的。
∙Ref和Clonable:这里不说,在总结Cocos2d-x内存管理的时候再进行详细总结;∙Action:所有动作的父类,定义了公共的操作;∙FiniteTimeAction:瞬时动作和延时动作的父类,可以定义动作的时间变化;∙Follow:跟随节点的动作;∙Speed:改变一个动作的时间,比如实现慢动作回放或者快进;∙ActionInstant:瞬间完成动作,中间没有任何动画效果;∙ActionInterval:动作会在指定的时间内完成,中间会有动画效果;∙FlipX:X轴方向翻转;∙MoveTo:移动动作;∙……下面就对上面说的这些类进行通过实际的代码进行总结。
Action类的主要成员函数以下是Action类的主要成员函数:/*** 返回一个新的Action对象,表示原动作的相反的动作*/virtual Action* reverse()const=0;// 如果动作已经完成了,就返回truevirtualbool isDone()const;// 在动作开始之前被调用,设置动作作用的对象virtualvoid startWithTarget(Node*target);/*** 在动作完成以后会被调用,它会设置"target"对象为空* 注:请永远不要手动调用该函数,而是调用对应的"target->stopAction(a ction);"*/virtualvoid stop();/*** 每帧都会调用的方法,如果你需要在每帧控制动作,则需要重写,时间间隔为动作间隔时间* 最好不要重写该函数,除非你真的知道怎么做*/virtualvoid step(float dt);/*** 每一帧都会调用一次该函数,参数time取值为0和1之间的任意值,例如:* 0表示动作刚刚开始的时候调用;* 0.5表示动作执行到一半的时候调用;* 1表示动作完成以后调用;*/virtualvoid update(float time);// 获得执行动作的对象inline Node*getTarget()const{return _target;}// 设置执行动作的对象inlinevoid setTarget(Node*target){ _target = target;}// 动作标签inlineint getTag()const{return _tag;}inlinevoid setTag(int tag){ _tag = tag;}瞬时动作ActionInstant是瞬时动作类。
瞬时动作表示瞬间完成动作,中间没有任何动画效果;由于ActionInstant的子类那么多,这里就以FlipX为例子,做一个简单的Demo。
效果如下图所示:可以看到小狗走到最左边时,会有一个转向的过程,这就是FlipX的动作效果。
示例代码如下:Size visibleSize=Director::getInstance()->getVisibleSize();// 创建移动动作ActionInterval*moveto=MoveTo::create(5,Vec2(0,200));// 创建X轴方向的翻转动作ActionInstant*flipx=FlipX::create(true);ActionInterval*moveback=MoveTo::create(5,Vec2(visibleSize.widt h,200));auto scene =Director::getInstance()->getRunningScene();auto layer = scene->getChildByTag(1);auto dog = layer->getChildByTag(1);// flipx->reverse()获得对应的逆向动作auto action =Sequence::create(moveto,flipx,moveback,flipx->reve rse(), NULL);dog->runAction(action);瞬时动作是只能够立刻完成的动作,这类动作是在下一帧立刻完成的动作,如设定位置、设定缩放等。
把它们包装成动作后,可以与其他动作类组合为复杂动作。
延时动作动作会在指定的时间内完成,中间会有动画效果。
延时动作通过属性值的逐渐变化来实现动画效果。
需要注意的是XXTo和XXBy的区别在于XXTo是表示最终值,而XXBy则表示向量-改变值。
比如MoveTo和MoveBy动作,如以下效果所示:示例代码如下:// 创建移动动作ActionInterval*moveto=MoveTo::create(5,Vec2(0,200)); ActionInterval*moveby=MoveBy::create(5,Vec2(-200,0));auto scene =Director::getInstance()->getRunningScene();auto layer = scene->getChildByTag(1);auto dog1 = layer->getChildByTag(1);auto dog2 = layer->getChildByTag(2);dog1->runAction(moveto);dog2->runAction(moveby);上面的那只狗是使用的MoveBy动作,而下面这只狗使用的是MoveTo动作。
MoveTo 动作都在用,下面就来看看稍微复杂点的贝塞尔曲线动作。
使用贝塞尔曲线,可以使节点进行曲线运动。
每条贝塞尔曲线都包含一个起点和一个终点。
在一条曲线中,起点和终点各自包含一个控制点,而控制点到端点的连线称作控制线。
控制点决定了曲线的形状,包含角度和长度两个参数。
如下图:实现效果如下:示例代码如下:ccBezierConfigbezier;bezier.controlPoint_1 =Point(200,300);bezier.controlPoint_2 =Point(400,400);bezier.endPosition=Point(50,200);auto bezierAction=BezierTo::create(2.0f,bezier);dog1->runAction(bezierAction);我们在实际开发中,主要的任务就是确定两个控制点,去协调精灵的移动弧度。
缓冲动作在游戏中,我们经常要实现一些加速度或者减速度的效果。
Cocos2d-x已经为我们做好了。
ActionEase类可以实现动作的速度由快到慢、速度随时间改变的匀速运动。
该类包含5类运动:∙指数缓冲;∙Sine缓冲;∙弹性缓冲;∙跳跃缓冲;∙回震缓冲。
每类运动都包含3个不同时期的变换:In、Out和InOut。
∙In表示开始的时候加速;∙Out表示结束的时候加速;∙InOut表示开始和结束的时候加速。
上述5类运动分别对应以下的类:∙指数缓冲:EaseExponentialIn、EaseExponentialOut和EaseExponentialInOut;∙Sine缓冲:EaseSineIn、EaseSineOut和EaseSineInOut;∙弹性缓冲:EaseElasticIn、EaseElasticOut和EaseElasticInOut;∙跳跃缓冲:EaseBounceIn、EaseBounceOut和EaseBounceInOut;∙回震缓冲:EaseBackIn、EaseBackOut和EaseBackInOut。
通过图表和描述也不能形象的说明上述5中运动,下面就通过指数缓冲的实际运行效果来进行展示:指数缓冲示例代码如下:ActionInterval*moveto1 =MoveTo::create(5,Vec2(50,100)); ActionInterval*moveto2 =MoveTo::create(5,Vec2(50,300)); ActionInterval*moveto3 =MoveTo::create(5,Vec2(50,500));auto scene =Director::getInstance()->getRunningScene();auto layer = scene->getChildByTag(1);auto dog1 = layer->getChildByTag(1);auto dog2 = layer->getChildByTag(2);auto dog3 = layer->getChildByTag(3);auto action1 =EaseExponentialIn::create(moveto1);auto action2 =EaseExponentialOut::create(moveto2);auto action3 =EaseExponentialInOut::create(moveto3);dog1->runAction(action1);dog2->runAction(action2);dog3->runAction(action3);从下到上的三次小狗,分别对应的是EaseExponentialIn、EaseExponentialOut和EaseExponentialInOut。
∙EaseExponentialIn表现的效果为速度越来越快;∙EaseExponentialOut表现的效果为速度越来越慢;∙EaseExponentialInOut表现的效果为中间速度非常快,两头速度较慢。
组合动作在游戏中,很多时候,一个对象并不是单纯的执行一个动作,而是依次执行一系列动作或者同时执行一系列动作,那么这又该如何去完成呢?现在就来看看Cocos2d-x中是如何去完成这些的吧。
∙Sequence 可以使用Sequence定义一个动作序列,应用实例可以参见瞬时动作这小节。
∙Spawn Spawn也是定义一系列动作,但是定义的动作会同时执行,使用方法同Sequence是一样的。