cocos2d-x初探学习笔记(6)--场景间切换效果
cocos2dx常见32种场景切换动画
cocos2dx常见32种场景切换动画转自(/liuhong135541/article/details/24375915)// CCTransitionJumpZoom// 作用:创建一个跳动的过渡动画// 参数1:过渡动作的时间// 参数2:切换到目标场景的对象// reScene = CCTransitionJumpZoom ::create(t , s);// CCDirector::sharedDirector()->replaceScene(reScene);// CCTransitionProgressRadialCCW// 作用:创建一个扇形条形式的过渡动画,逆时针方向// 参数1:过渡动作的时间// 参数2:切换到目标场景的对象// reScene = CCTransitionProgressRadialCCW::create(t, s);// CCDirector::sharedDirector()->replaceScene(reScene);// CCTransitionProgressRadialCW// 作用:创建一个扇形条形式的过渡动画,顺时针方向// 参数1:过渡动作的时间// 参数2:切换到目标场景的对象// reScene = CCTransitionProgressRadialCW::create(t,s);// CCDirector::sharedDirector()->replaceScene(reScene);// CCTransitionProgressHorizontal// 作用:创建一个水平条形式的过渡动画,// 参数1:过渡动作的时间// 参数2:切换到目标场景的对象// reScene = CCTransitionProgressHorizontal ::create(t,s); // CCDirector::sharedDirector()->replaceScene(reScene);// CCTransitionProgressVertical// 作用:创建一个垂直条形式的过渡动画,// 参数1:过渡动作的时间// 参数2:切换到目标场景的对象// reScene = CCTransitionProgressVertical::create(t, s); // CCDirector::sharedDirector()->replaceScene(reScene);// CCTransitionProgressInOut// 作用:创建一个由里向外扩展的过渡动画,// 参数1:过渡动作的时间// 参数2:切换到目标场景的对象// reScene = CCTransitionProgressInOut::create(t, s);// CCDirector::sharedDirector()->replaceScene(reScene);// CCTransitionProgressOutIn// 作用:创建一个由外向里扩展的过渡动画,// 参数1:过渡动作的时间// 参数2:切换到目标场景的对象// reScene = CCTransitionProgressOutIn::create(t, s);// CCDirector::sharedDirector()->replaceScene(reScene);// CCTransitionCrossFade// 作用:创建一个逐渐透明的过渡动画// 参数1:过渡动作的时间// 参数2:切换到目标场景的对象// reScene = CCTransitionCrossFade::create(t, s);// CCDirector::sharedDirector()->replaceScene(reScene);// CCTransitionPageTurn// 作用:创建一个翻页的过渡动画// 参数1:过渡动作持续的时间// 参数2:切换的目标场景的对象// 参数3:是否逆向翻页// reScene = CCTransitionPageTurn::create(t, s, false);// CCDirector::sharedDirector()->replaceScene(reScene);// CCTransitionFadeTR// 作用:创建一个部落格过渡动画,从左下到右上// 参数1:过渡动作持续的时间// 参数2:切换的目标场景的对象// reScene =CCTransitionFadeTR::create(t, s);// CCDirector::sharedDirector()->replaceScene(reScene);// CCTransitionFadeBL// 作用:创建一个部落格过渡动画,从右上到左下// 参数1:过渡动作持续的时间// 参数2:切换的目标场景的对象// reScene = CCTransitionFadeBL::create(t, s);// CCDirector::sharedDirector()->replaceScene(reScene);// CCTransitionFadeUp// 作用:创建一个从下到上,条形折叠的过渡动画// 参数1:过渡动作持续的时间// 参数2:切换的目标场景的对象// reScene= CCTransitionFadeUp::create(t, s);// CCDirector::sharedDirector()->replaceScene(s);// CCTransitionFadeDown// 作用:创建一个从上到下,条形折叠的过渡动画// 参数1:过渡动作持续的时间// 参数2:切换的目标场景的对象// reScene = CCTransitionFadeDown::create(t, s);// CCDirector::sharedDirector()->replaceScene(reScene);// CCTransitionTurnOffTiles// 作用:创建一个随机方格消失的过渡动画// 参数1:过渡动作的持续时间// 参数2:切换的目标场景的对象// reScene= CCTransitionTurnOffTiles::create(t, s);// CCDirector::sharedDirector()->replaceScene(reScene);// CCTransitionSplitRows// 作用:创建一个分行划分切换的过渡动画// 参数1:过渡动作的持续时间// 参数2:切换的目标场景的对象// reScene = CCTransitionSplitRows::create(t, s);// CCDirector::sharedDirector()->replaceScene(reScene);// CCTransitionSplitCols// 作用:创建一个分列划分切换的过渡动画// 参数1:过渡动作的持续时间// 参数2:切换的目标场景的对象// reScene = CCTransitionSplitCols::create(t, s);// CCDirector::sharedDirector()->replaceScene(reScene); // CCTransitionFade// 作用:创建一个逐渐过渡到目标颜色的切换动画// 参数1:过渡动作的持续时间// 参数2:切换的目标场景的对象// 参数3:目标颜色// reScene= CCTransitionFade::create(t, s, ccc3(255, 0, 0));// CCDirector::sharedDirector()->replaceScene(reScene);// CCTransitionFlipX// 作用:创建一个x轴反转的切换动画// 参数1:过渡动作的持续时间// 参数2:切换的目标场景的对象// 参数3:反转类型的枚举变量左右上下// kOrientationDownOver kOrientationLeftOver kOrientationRightOver kOrientationUpOver// reScene = CCTransitionFlipX::create(t, s, kOrientationRightOver);// CCDirector::sharedDirector()->replaceScene(reScene);// CCTransitionFlipY// 参数1:过渡动作的持续时间// 参数2:切换的目标场景的对象// 参数3:反转类型的枚举变量左右上下// reScene = CCTransitionFlipY::create(t, s// , kOrientationDownOver);// CCDirector::sharedDirector()->replaceScene(reScene);// CCTransitionFlipAngular// 作用:创建一个带有反转角切换动画//参数1:过渡动作的持续时间// 参数2:切换的目标场景的对象// 参数3:反转类型的枚举变量左右上下// reScene = CCTransitionFlipAngular::create(t, s, kOrientationLeftOver);// CCDirector::sharedDirector()->replaceScene(reScene);// CCTransitionZoomFlipX// 作用:创建一个带有缩放的x轴反转切换的动画// 参数1:过渡动作的持续时间// 参数2:切换的目标场景的对象// 参数3:反转类型的枚举变量左右上下// reScene=CCTransitionZoomFlipX::create(t, s, kOrientationLeftOver);// CCDirector::sharedDirector()->replaceScene(reScene);// CCTransitionZoomFlipY// 作用:创建一个带有缩放的Y轴反转切换的动画// 参数1:过渡动作的持续时间// 参数2:切换的目标场景的对象// 参数3:反转类型的枚举变量左右上下// reScene=CCTransitionZoomFlipY::create(t, s, kOrientationDownOver);// CCDirector::sharedDirector()->replaceScene(reScene);// CCTransitionZoomFlipAngular// 作用:创建一个带有缩放,反转角切换的动画// 参数1:过渡动作的持续时间// 参数2:切换的目标场景的对象// 参数3:反转类型的枚举变量左右上下// reScene=CCTransitionZoomFlipAngular::create(t, s, kOrientationRightOver);// CCDirector::sharedDirector()->replaceScene(reScene);// CCTransitionShrinkGrow// 创建一个放缩交替的过渡动画// 参数1:过渡动作的持续时间// 参数2:切换的目标场景的对象// reScene = CCTransitionShrinkGrow::create(t, s);// CCDirector::sharedDirector()->replaceScene(reScene);// CCTransitionRotoZoom// 创建一个旋转放缩交替的过渡动画// 参数1:过渡动作的持续时间// 参数2:切换的目标场景的对象// reScene = CCTransitionRotoZoom::create(t, s);// CCDirector::sharedDirector()->replaceScene(reScene);// CCTransitionMoveInL// 作用:创建一个从左边推入覆盖的过渡动画// 参数1:过渡动作的持续时间// 参数2:切换的目标场景的对象// reScene = CCTransitionMoveInL::create(t, s);// CCDirector::sharedDirector()->replaceScene(reScene);// CCTransitionMoveInR// 作用:创建一个从右边推入覆盖的过渡动画// 参数1:过渡动作的持续时间// 参数2:切换的目标场景的对象// reScene = CCTransitionMoveInR::create(t, s);// CCDirector::sharedDirector()->replaceScene(reScene);// CCTransitionMoveInB// 作用:创建一个从下边推入覆盖的过渡动画// 参数1:过渡动作的持续时间// 参数2:切换的目标场景的对象// reScene = CCTransitionMoveInB::create(t, s);// CCDirector::sharedDirector()->replaceScene(reScene);// CCTransitionMoveInT// 作用:创建一个从上边推入覆盖的过渡动画// 参数1:过渡动作的持续时间// 参数2:切换的目标场景的对象// reScene = CCTransitionMoveInT::create(t, s);// CCDirector::sharedDirector()->replaceScene(reScene);// CCTransitionSlideInL// 作用:创建一个从左侧推入并顶出旧场景的过渡动画// 参数1:过渡动作的持续时间// 参数2:切换的目标场景的对象// reScene =CCTransitionSlideInL::create(t, s);// CCDirector::sharedDirector()->replaceScene(reScene);// CCTransitionSlideInR// 作用:创建一个从右侧推入并顶出旧场景的过渡动画// 参数1:过渡动作的持续时间// 参数2:切换的目标场景的对象// reScene =CCTransitionSlideInR::create(t, s);// CCDirector::sharedDirector()->replaceScene(reScene);// CCTransitionSlideInT// 作用:创建一个从顶部推入并顶出旧场景的过渡动画// 参数1:过渡动作的持续时间// 参数2:切换的目标场景的对象// reScene =CCTransitionSlideInT::create(t, s);// CCDirector::sharedDirector()->replaceScene(reScene);// CCTransitionSlideInB// 作用:创建一个从下部推入并顶出旧场景的过渡动画// 参数1:过渡动作的持续时间// 参数2:切换的目标场景的对象。
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共有的属性和方法。
cocos 2dx 场景切换效果原理
cocos 2dx 场景切换效果原理Cocos2d-x 是一个流行的开源游戏引擎,用于开发2D和3D游戏。
场景切换是游戏开发中常见的操作,Cocos2d-x提供了丰富的场景切换效果。
这些切换效果的原理通常涉及以下关键概念:场景(Scene):在Cocos2d-x中,场景是游戏中的一个独立画面或游戏状态。
每个场景通常包含游戏对象、精灵、图层和其他元素。
你可以创建多个场景,然后在它们之间切换。
切换场景(Scene Transition):Cocos2d-x提供了不同的切换场景效果,允许你在不同的场景之间切换。
切换场景的效果是通过一种称为场景过渡(Scene Transition)的机制来实现的。
过渡类(Transition Class):Cocos2d-x中有各种过渡类,它们实现了不同的切换效果。
例如,TransitionFade, TransitionFlipX, TransitionSlideInT, 等等。
你可以选择合适的过渡类来实现你想要的切换效果。
场景切换的基本原理如下:创建一个新的场景对象,例如Scene* newScene = MyNewScene::create();,其中 MyNewScene 是你要切换到的新场景。
使用适当的过渡类创建一个场景过渡对象,例如TransitionFade* transition = TransitionFade::create(1.0f, newScene);,其中 1.0f 是过渡时间,newScene 是你创建的新场景。
使用过渡对象切换场景,例如Director::getInstance()->replaceScene(transition);。
这将导致当前场景以你选择的切换效果过渡到新场景。
这个过程是通过Cocos2d-x引擎内部的渲染和动画机制来实现的。
以下是一个示例,展示如何在Cocos2d-x中切换场景并使用淡出效果:// 创建新场景Scene* newScene = MyNewScene::create();// 创建淡出过渡效果TransitionFade* transition = TransitionFade::create(1.0f, newScene);// 切换场景Director::getInstance()->replaceScene(transition);这只是一个简单的示例,Cocos2d-x提供了更多强大的切换效果和定制选项,你可以根据你的游戏需求选择合适的切换方式。
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版的下载(当然你也可以下载到更⽼的版本)。
老G的cocos2d-x学习笔记
由于cocos2d-x是cocos2d-iphone的c++移植版本。
所以我就直接翻译了cocos2d网站上的描述。
cocos2d for iphone 是一个用于构建2D游戏,demos和其他图形/交互应用程序的框架。
他基于cocos2d设计:他使用相同的概念,但是用objc替代了python。
cocos2d for iphone 是:易用的:他使用友好的API,并伴有大量例子快速的:他使用opengles实现并优化了数据结构灵活的:他容易扩展,容易整合第三方库免费的:开源,兼容闭源和开源游戏社区支持的:有一个大的活跃的友好的社区AppStore认可的:超过2500款AppStore游戏使用它开发,包括许多热卖游戏。
cocos2d for iphone 的特性:场景管理(工作流)场景间过度精灵和精灵表特效:Lens, Ripple, Waves, Liquid, Twirl, 等动作(行为)变换动作:Move, Rotate, Scale, Jump, 等组合动作:Sequence, Spawn, Repeat, Reverse,等灵活动作:Exp, Sin, Cubic, 等混合动作:CallFunc, OrbitCamera基本的菜单和按钮集成物理引擎(box2d和chipmunk)粒子系统文本渲染支持(可变的和固定宽度字体)纹理集支持瓦片地图支持(TMX格式):正交地图等角地图(斜视角)六边形地图视差滚动支持声音支持Streak Motion support渲染纹理支持高分榜(cocos live)Point based API: Supports Retina Display触摸、重力加速器、键盘、鼠标支持横竖屏切换、自动全屏支持整合Pause/Resume快速纹理:支持PVRTC textures, 8位 textures, 16位 textures and 32位 textures 基于opengl es。
cocos反复切换场景导致触摸事件失效的原理
cocos反复切换场景导致触摸事件失效的原理1. 引言cocos2d-x是一款非常流行的游戏开发引擎,通过它我们可以轻松地创建2D游戏。
然而,有时候在使用cocos2d-x开发游戏的过程中,我们可能会遇到一个问题:即反复切换场景导致触摸事件失效。
为了解决这个问题,我们需要了解其背后的原理。
2. 原因分析场景的切换在游戏开发中是常见的操作,但在cocos2d-x中,每当我们切换场景时,旧的场景会被销毁,而新的场景会被创建。
当场景切换时,cocos2d-x会自动处理之前的场景,释放其内存。
然而,由于触摸事件是与场景相关的,当旧场景被销毁后,触摸事件也会被删除。
如果我们在场景切换过程中不正确地处理触摸事件,就会导致触摸事件失效。
3. 解决方法为了解决这个问题,我们可以采取以下措施:3.1 添加触摸事件处理在新场景中,我们需要添加对触摸事件的处理。
可以在新场景创建时,将触摸监听器添加到新场景的节点上。
这样,当触摸事件发生时,新场景中的节点会接收到触摸事件,并进行相应的处理。
3.2 处理场景切换中的触摸事件在场景切换的过程中,我们需要正确地处理旧场景和新场景之间的触摸事件。
可以通过在场景切换过程中的适当时机,进行触摸事件的暂停和恢复,以确保触摸事件能够正确地传递到相应的场景中。
3.3 保存和恢复触摸事件状态为了避免场景切换导致触摸事件失效,我们可以在切换场景之前,将当前场景的触摸事件状态进行保存。
在新场景创建完成后,将之前保存的触摸事件状态进行恢复。
这样,触摸事件就能够在切换场景后继续正常工作。
4. 我的观点和理解在我看来,解决cocos2d-x中反复切换场景导致触摸事件失效的问题,在一定程度上是因为场景的切换机制导致的。
cocos2d-x为了提高运行效率,在场景切换时会自动销毁旧场景,并创建新场景。
这种机制的设计有其合理性,但也带来了一些问题,如触摸事件的处理。
为了正确地处理触摸事件,我们需要关注场景切换过程中的时机和触摸事件的状态。
cocos2d-x学习记录5——CCTransition场景过渡
cocos2d-x学习记录5——CCTransition场景过渡利⽤CCTransition能够创建出⼀系列的场景过渡动画,能够使场景切换时更加绚丽丰富。
CCTransition派⽣出很多过渡动画,传⼊的参数⼀般包括过渡时间和创建的场景。
MyScene.h内容1 #ifndef MyScene_H_H2#define MyScene_H_H34 #include "cocos2d.h"5using namespace cocos2d;678class TranScene9 {10public:11static CCTransitionScene* createScene(CCScene *scene);1213static int index;14 };151617class MyScene : public CCLayer18 {19public:20static CCScene* createScene();21virtual bool init();22 CREATE_FUNC( MyScene );2324virtual bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent);25//virtual void ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent);26//virtual void ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent);27//virtual void ccTouchCancelled(CCTouch *pTouch, CCEvent *pEvent);2829virtual void registerWithTouchDispatcher();3031//virtual void ccTouchesBegan(CCSet *pTouches, CCEvent *pEvent);32//virtual void ccTouchesMoved(CCSet *pTouches, CCEvent *pEvent);33//virtual void ccTouchesEnded(CCSet *pTouches, CCEvent *pEvent);34//virtual void ccTouchesCancelled(CCSet *pTouches, CCEvent *pEvent);3536private:37 };3839class NextScene : public CCLayer40 {41public:42static CCScene* createScene();43virtual bool init();44 CREATE_FUNC( NextScene );4546virtual bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent);4748virtual void registerWithTouchDispatcher();4950private:51 };5253#endifMyScene.cpp内容#include "MyScene.h"int TranScene::index = 0;CCTransitionScene* TranScene::createScene(CCScene *scene){CCTransitionScene *tranScene = NULL;switch(index){case0: tranScene = CCTransitionFlipX::create(1, scene); break;case1: tranScene = CCTransitionFlipY::create(1, scene); break;case2: tranScene = CCTransitionFadeDown::create(1, scene); break;case3: tranScene = CCTransitionFadeBL::create(1, scene); break;case4: tranScene = CCTransitionCrossFade::create(1, scene); break;}index = (++index)%5;return tranScene;}CCScene* MyScene::createScene(){CCScene *scene = CCScene::create();MyScene *layer = MyScene::create();scene->addChild(layer);return scene;};bool MyScene::init(){if( !CCLayer::init() ){return false;}CCSize size = CCDirector::sharedDirector()->getWinSize();CCSprite *sprite = CCSprite::create("pal4.png");sprite->setAnchorPoint( ccp(0.5, 0.5) );//sprite->setPosition( ccp(size.width/2, size.height/2) );sprite->setPosition( ccp(size.width/2, size.height/2) );sprite->setScaleX( size.width/sprite->getContentSize().width );sprite->setScaleY( size.height/sprite->getContentSize().height );sprite->setTag(2345);addChild(sprite);setTouchEnabled(true);return true;}void MyScene::registerWithTouchDispatcher(){CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, 0, true); }bool MyScene::ccTouchBegan(CCTouch* pTouch, CCEvent *pEvent){CCScene *scene = NextScene::createScene();//CCTransitionScene *tranScene = CCTransitionFlipX::create(1, scene);CCTransitionScene *tranScene = TranScene::createScene(scene);CCDirector::sharedDirector()->replaceScene(tranScene);return true;}CCScene* NextScene::createScene(){CCScene *scene = CCScene::create();NextScene *layer = NextScene::create();scene->addChild(layer);return scene;};bool NextScene::init(){if( !CCLayer::init() ){return false;}CCSize size = CCDirector::sharedDirector()->getWinSize();CCSprite *sprite = CCSprite::create("pal_4.png");sprite->setAnchorPoint( ccp(0.5, 0.5) );//sprite->setPosition( ccp(size.width/2, size.height/2) );sprite->setPosition( ccp(size.width/2, size.height/2) );//sprite->setScale(0.5f);sprite->setScaleX( size.width/sprite->getContentSize().width );sprite->setScaleY( size.height/sprite->getContentSize().height );sprite->setTag(2345);addChild(sprite);setTouchEnabled(true);return true;}void NextScene::registerWithTouchDispatcher(){CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, 0, true);}bool NextScene::ccTouchBegan(CCTouch* pTouch, CCEvent *pEvent){CCScene *scene = MyScene::createScene();//CCTransitionScene *tranScene = CCTransitionFlipX::create(1, scene);CCTransitionScene *tranScene = TranScene::createScene(scene);CCDirector::sharedDirector()->replaceScene(tranScene);return true;}实例中,⾃⼰简单创建了两个场景,仅仅是所显⽰的sprite不同⽽已,并在切换时添加具体的切换效果即可。
quick-cocos2d-x 学习系列之六 CoinFlip
quick-cocos2d-x 学习系列之六CoinFlip下面我们来看一个很完整的例子,CoinFlip,这个DEMO已经非常完整可以直接用来玩耍了。
代码路径:.. \quick\samples\coinflip这个游戏还是很益智的。
1.代码逻辑开始部分基本和其他的都一致,从main.lua文件进入,到达MyApp.lua文件中。
(MyApp继承于cc.mvc.AppBase)主要函数是run,enterMenuScene,enterMoreGamesScene,enterChooseLevelScene,playLevel (程序逻辑结构比之前略微复杂一点:有多个文件夹data,scenes,ui,views.其中data用来存放关卡信息,ui是UI相关文件,scenes是4个场景文件,views是显示相关的函数和类)1.1.1R un该函数会增加程序搜索路径res文件,加载游戏的相关PNG文件,加载声音文件,然后调用程序self:enterMenuScene().2.1.1enterMenuScene该函数调用如下:self:enterScene("MenuScene", nil, "fade", 0.6, display.COLOR_WHITE)这个enterScene函数是继承自父类的。
直接进入到MenuScene场景中,该场景定义在文件app/scenes/MenuScene.lua文件中。
3.1.1nterMoreGamesScene该函数调用如下:self:enterScene("MoreGamesScene", nil, "fade", 0.6, display.COLOR_WHITE)其他同上4.1.1enterChooseLevelScene该函数调用如下:self:enterScene("ChooseLevelScene", nil, "fade", 0.6, display.COLOR_WHITE)其他同上5.1.1playLevel该函数调用如下:self:enterScene("PlayLevelScene", {levelIndex}, "fade", 0.6, display.COLOR_WHITE)其他同上2.MenuScene导入其他函数如下:local AdBar = import("..views.AdBar")local BubbleButton = import("..views.BubbleButton")游戏开始后的第一个场景,即菜单场景。
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参数表示 漩涡扭曲程度。
cocos2dx场景切换中init、onEnter、onEnterTransitionDidFinish的调用顺序
#include "kazmath/vec3.h"
#include "kazmath/vec4.h"
#include "kazmath/plane.h"
const kmScalar kmPlaneDot(const kmPlane* pP, const kmVec4* pV)
{
return (pP->a * pV->x +
pP->b * pV->y +
pP->c * pV->z);
}
kmPlane* const kmPlaneFromPointNormal(kmPlane* pOut, const kmVec3* pPoint, const kmVec3* pNormal)
n.z = pP->c;
l = 1.0f / kmVec3Length(&n); //Get 1/length
kmVec3Normalize(&n, &n); //Normalize the vector and assign to pOut
pOut->a = n.x;
这些方法调用的先后顺序如下(使用 replaceScene 方法):
1. 第2个场景的 scene 方法
2. 第2个场景的 init 方法
3. 第2个场景的 onEnter 方法
4. 转场
5. 第1个场景的 onExit 方法
6. 第2个场景的 onEnterTransitionDidFinish 方法
pOut->d = -kmVec3Dot(pNormal, pPoint);
【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的⼀系列⽅法控制游戏中不同的场景的⾃由切换。
2.1cocos2dx-33种场景切换
2.1 cocos2dx-33种场景切换欢迎回到“和屌丝一起学cocos2dx”系列教程,上节我们说到了“24种基本特效”,不知道大家做出来了没有呢?这节课,我们又要开始新的征途了哦,大家准备好了没啊,我们这节要学习33种切换场景。
也是很常用的哦,大家可要好好学啊。
【一】:为啥学他废话,你说为啥,不说了。
【二】:函数1.创建CCScene * scene2=Scenedemo2::scene();2.函数[1]:CCTransitionCrossFade::create(时间,目标场景);//慢慢淡化到另一场景[2]:CCTransitionFade::create(时间,目标场景);//本场景变暗消失后另一场景慢慢出现[3]:CCTransitionFadeBL::create(时间,目标场景);//本场景右上角到左下角方块消失到另一场景[4]:CCTransitionFadeDown::create(时间,目标场景);//本场景从上到下横条消失到另一场景[5]:CCTransitionFadeTR::create(时间,目标场景);//本场景左下角到右上角方块消失到另一场景[6]:CCTransitionFadeUp::create(时间,目标场景);//本场景从下到上横条消失到另一场景[7]:CCTransitionFlipAngular::create(时间,目标场景,样式);//本场景翻转消失到另一场景(斜上方)//样式(可以不写)://kCCTransitionOrientationLeftOver(左向右翻转)//kCCTransitionOrientationRightOver(右向左翻转)[8]:CCTransitionFlipX::create(时间,目标场景,样式);//本场景翻转消失到另一场景(X轴)//样式(可以不写)://kCCTransitionOrientationLeftOver(左向右翻转)//kCCTransitionOrientationRightOver(右向左翻转)[9]:CCTransitionFlipY::create(时间,目标场景);//本场景翻转消失到另一场景(Y轴)//样式(可以不写)://kCCTransitionOrientationUpOver(下向上翻转)//kCCTransitionOrientationDownOver(上向下翻转)[10]:CCTransitionJumpZoom::create(时间,目标场景);//本场景跳动消失后另一场景跳动出现[11]:CCTransitionMoveInB::create(时间,目标场景);//另一场景由整体从下面出现[12]:CCTransitionMoveInL::create(时间,目标场景);//另一场景由整体从左面出现[13]:CCTransitionMoveInT::create(时间,目标场景);//另一场景由整体从上面出现[14]:CCTransitionMoveInR::create(时间,目标场景);//另一场景由整体从右面出现[15]:CCTransitionPageTurn::create(时间,目标场景,bool);//翻页切换,bool为true是向前翻。
cocos2d-x学习指南CCMenu和CCMenuItem详解
CCMenu和CCMenuItem详解; 学习cocos2d-x中的菜单主要需要了解:菜单(CCMenu)和菜单项(CCMenuItem)以及CCMenuItem的具体子类。
a. 下面来学习一下相关的类。
1. CCMenu菜单,是CCLayer的子类,是一个层(容器),可以往里面添加菜单项。
CCMenu默认接受触屏事件的优先级是-128(优先级很高,因为值越小,响应触屏事件的优先级越高),可以通过继承它实现自定义的效果,创建CCMenu对象的函数:static CCMenu* menuWithItems(CCMenuItem* item, ...);static CCMenu* menuWithItem(CCMenuItem* item);2. CCMenuItem菜单项,开发中一般是直接使用它的子类。
CCMenuItem有三个直接子类:CCMenuItemLabel(字符标签菜单)、CCMenuItemSprite(图片菜单)、CCMenuItemToggle(开关菜单)。
现在分别来了解一下各个不同的菜单项。
(1) CCMenuItemLabel:使用文字标签创建菜单项所有支持CCLabelProtocol的节点都可以用来创建CCMenuItemLabel,CCLabelProtocol是标签的共同接口。
CCLabelProtocol也有三个直接子类。
CCLabelTTF:同时也是CCSprite的子类,用来渲染文字标签的,可以指定字体,每次设置字符串内容时都需要重新创建纹理和渲染,性能不好,可以看它的相关源码:void CCLabelTTF::setString(const char *label){if (m_pString){delete m_pString;m_pString = NULL;}m_pString = new std::string(label);CCTexture2D *texture;if( CCSize::CCSizeEqualToSize( m_tDimensions, CCSizeZero ) ){texture = new CCTexture2D();texture->initWithString(label, m_pFontName->c_str(), m_fFontSize); }else{texture = new CCTexture2D();texture->initWithString(label, m_tDimensions, m_eAlignment, m_pFontName->c_str(), m_fFontSize);}this->setTexture(texture);texture->release();CCRect rect = CCRectZero;rect.size = m_pobTexture->getContentSize();this->setTextureRect(rect);}可以用CCLabelBMFont或者CCLabelAtlas代替它。
cocos2dx 原理
cocos2dx 原理cocos2d-x是一款跨平台的游戏开发框架,具备高效性能和易用性,广泛应用于手机游戏和电子游戏领域。
本文将介绍cocos2d-x的原理和工作流程。
cocos2d-x使用C++语言进行开发,通过OpenGL实现图形渲染和动画效果。
它采用了一种基于场景和节点的层次结构,使得游戏开发者能够方便地管理游戏对象和场景。
下面我们将详细介绍cocos2d-x的工作原理。
cocos2d-x的核心概念是场景(Scene)和节点(Node)。
场景是游戏中的一个可视化场景,可以包含多个节点。
节点是游戏中的一个可见对象,比如精灵(Sprite)、标签(Label)等。
在cocos2d-x中,每个节点都有自己的位置、大小、旋转角度等属性。
在游戏开始时,cocos2d-x会创建一个主场景,并把它设置为当前场景。
游戏开发者可以根据需要,在主场景中添加不同的节点,组成游戏的各个画面。
比如,可以创建一个精灵节点作为游戏角色,再创建一个标签节点显示得分等等。
cocos2d-x使用一个叫做“Director”的类来管理场景和节点。
Director负责处理游戏循环,即不断更新和渲染游戏场景。
游戏开发者只需要编写一个游戏逻辑的更新函数,然后将其注册到Director中,就可以实现游戏的运行。
在游戏循环中,Director会先调用更新函数,处理游戏的逻辑。
然后,它会遍历当前场景中的所有节点,并调用它们的更新函数。
这样,每个节点都有机会更新自己的状态和位置。
最后,Director会调用渲染函数,将更新后的场景绘制到屏幕上。
cocos2d-x使用OpenGL进行图形渲染。
OpenGL是一种跨平台的图形库,可以在不同的设备上实现高性能的图形渲染。
cocos2d-x利用了OpenGL的强大功能,实现了丰富的图形效果,比如粒子效果、光照效果等。
开发者可以通过一些简单的接口调用,实现各种各样的动画效果。
除了图形渲染,cocos2d-x还提供了音频、输入和网络等功能。
cocos2d-x入门拖动间隐效果
在游戏的实现过程中,我们有时会需要在某个游戏对象上的运动轨迹上实现间隐效果,这种感觉就好像是类似飞机拉线似的拖尾巴,使我们的游戏在视觉上感觉很好,比如子弹的运动轨迹等等,在kjava时代,这种效果,往往需要美术通过大量的图片来实现,cocos2d-x提供了一种内置的间隐效果拖尾的实现方法CCMotionStreak。
第一步,定义MotionStreak,当然是通过构造函数的方式来实现
m_streak = CCMotionStreak::streakWithFade(3, 3, s_streak, 64, 32,
ccc4(255,255,255,255) );
第一个参数是间隐的时间,第二个参数是间隐片断的大小,第三个参数是贴图的路径,第四个参数是贴图的宽,第五个参数是贴图长,第六个参数是颜色值argb
第二步,加入到场景中,这个很简单addChild
第三步,设置位置,setPosition即可
Test中实现了记录鼠标拖动路径的效果。
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.组合动作按照一定的次序将上述基本动作组合起来,形成连贯的一套组合动作。
cocos改变场景屏幕方向的方法
cocos改变场景屏幕方向的方法在 Cocos Creator 中,改变场景屏幕方向通常涉及到对游戏视图的设置。
以下是一些常用的方法来改变屏幕方向:1. 使用分辨率适配:在项目的 `` 文件中,你可以设置 `` 为 `SHOW_ALL`、`NO_BORDER` 或 `SHOW_ALL_WITH_BLACK_BORDER`,以适应不同的屏幕尺寸和方向。
例如,设置为 `SHOW_ALL` 将使游戏全屏显示,并自动调整大小以适应屏幕。
2. 使用布局管理器:在 Cocos Creator 中,你可以使用布局管理器来控制场景中的节点布局。
例如,你可以使用 `` 组件来控制节点在屏幕不同方向下的布局。
3. 调整节点位置:你可以直接调整场景中节点的位置,以适应不同的屏幕方向。
这可以通过设置节点位置的 X 和 Y 值来实现。
4. 旋转节点:如果你的节点是一个可旋转的组件(如 ``),你可以使用 `rotation` 属性来旋转它,以适应不同的屏幕方向。
5. 调整摄像机:你还可以调整摄像机的位置和角度,以改变游戏的视角和显示效果。
例如,通过调整摄像机的位置或旋转摄像机来适应不同的屏幕方向。
6. 监听屏幕旋转事件:在某些情况下,你可能希望在屏幕方向改变时执行某些操作。
你可以监听 `(_CHANGED)` 事件来检测屏幕方向的改变。
7. 使用自定义分辨率:在某些情况下,你可能需要使用自定义分辨率来适应特定的屏幕尺寸或方向。
这可以通过在项目的 `` 文件中设置 `` 来实现。
记住,不同版本的 Cocos Creator 可能有些许差异,所以确保查看你正在使用的版本的官方文档或资源来获取最准确的信息。
CocosCreator资源加载流程剖析【六】——场景切换流程
CocosCreator资源加载流程剖析【六】——场景切换流程这⾥讨论场景切换的完整流程,从我们调⽤了loadScene开始切换场景,到场景切换完成背后发⽣的事情。
整个流程可以分为场景加载和场景切换两部分,另外还简单讨论了场景的预加载。
加载场景的流程loadScene主要做了3件事,通过_getSceneUuid获取要加载场景的信息,对于原⽣平台的⾮启动场景执⾏了cc.LoaderLayer.preload(但查询了所有的代码,并没有发现LoaderLayer的实现,也没有发现任何对cc.runtime赋值的地⽅),最后通过_loadSceneByUuid加载场景。
loadScene: function (sceneName, onLaunched, _onUnloaded) {// 同⼀时间只能有⼀个场景在加载if (this._loadingScene) {cc.errorID(1213, sceneName, this._loadingScene);return false;}// 获取场景的信息var info = this._getSceneUuid(sceneName);if (info) {var uuid = info.uuid;// 触发⼀个场景开始加载的事件this.emit(cc.Director.EVENT_BEFORE_SCENE_LOADING, sceneName);// 设置当前正在加载的场景this._loadingScene = sceneName;// 在原⽣运⾏时且该场景并⾮启动场景时,可以进⾏异步加载。
if (CC_JSB && cc.runtime && uuid !== this._launchSceneUuid) {var self = this;var groupName = cc.path.basename(info.url) + '_' + info.uuid;console.log('==> start preload: ' + groupName);var ensureAsync = false;// 如果cc.LoaderLayer.preload是异步的,会在preload结束后执⾏_loadSceneByUuid。
cocos2d-x学习笔记
第一课解读cocos2d-x中的AppDelegate文件《一》AppDelegate.h中的文件如下#ifndef_APP_DELEGATE_H_ //预编译头也可以写#define_APP_DELEGATE_H_ //#pragma once#include"cocos2d.h"class AppDelegate : private cocos2d::CCApplication{public:AppDelegate();virtual ~AppDelegate();virtual bool applicationDidFinishLaunching();virtual void applicationDidEnterBackground();virtual void applicationWillEnterForeground();};#endif《二》AppDelegate.cpp中的文件如下#include"AppDelegate.h"#include<vector>#include<string>#include"HelloWorldScene.h"#include"AppMacros.h"#include"Myscene.h"USING_NS_CC; //cocos内部命名方法using namespace std; //使用命名空间AppDelegate::AppDelegate() { //构造函数}AppDelegate::~AppDelegate() { //析构函数}bool AppDelegate::applicationDidFinishLaunching() {// initialize directorCCDirector* pDirector = CCDirector::sharedDirector();CCEGLView* pEGLView = CCEGLView::sharedOpenGLView();pDirector->setOpenGLView(pEGLView);CCSize frameSize = pEGLView->getFrameSize();// Set the design resolution#if (CC_TARGET_PLATFORM == CC_PLATFORM_WINRT) ||(CC_TARGET_PLATFORM == CC_PLATFORM_WP8)pEGLView->setDesignResolutionSize(designResolutionSize.width, designResolutionSize.height, kResolutionShowAll);#elsepEGLView->setDesignResolutionSize(designResolutionSize.width, designResolutionSize.height, kResolutionNoBorder);#endifvector<string> searchPath;if (frameSize.height > mediumResource.size.height){searchPath.push_back(largeResource.directory);pDirector->setContentScaleFactor(MIN(largeResource.size.height/designResolutionS ize.height, largeResource.size.width/designResolutionSize.width));}// if the frame's height is larger than the height of small resource size, select medium resource.else if (frameSize.height > smallResource.size.height){searchPath.push_back(mediumResource.directory);pDirector->setContentScaleFactor(MIN(mediumResource.size.height/designResoluti onSize.height, mediumResource.size.width/designResolutionSize.width));}// if the frame's height is smaller than the height of medium resource size, select small resource.else{searchPath.push_back(smallResource.directory);pDirector->setContentScaleFactor(MIN(smallResource.size.height/designResolutionS ize.height, smallResource.size.width/designResolutionSize.width));}// set searching pathCCFileUtils::sharedFileUtils()->setSearchPaths(searchPath);// turn on display FPSpDirector->setDisplayStats(true); //是否在屏幕上显示FPS// 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 = Myscene::scene();//初始页面的控制就在这里// runpDirector->runWithScene(pScene); //运行游戏return true;}// This function will be called when the app is inactive. When comes a phone call,it's be invoked toovoid AppDelegate::applicationDidEnterBackground() {CCDirector::sharedDirector()->stopAnimation();// if you use SimpleAudioEngine, it must be pause// SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic(); }// this function will be called when the app is active againvoid AppDelegate::applicationWillEnterForeground() {CCDirector::sharedDirector()->startAnimation();// if you use SimpleAudioEngine, it must resume here// SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic(); }第二课添加新场景我们这里就介绍添加一个Myscene场景,分别添加Myscene.h文件和Myscene.cpp文件,那么在Myscene.h和Myscene.cpp中该如何写?《一》Myscene.h中的文件#pragma once#include"cocos2d.h"USING_NS_CC;class Myscene : public cocos2d:: CCLayer{public :Myscene(void);//构造函数~Myscene(void);//析构函数virtual bool init();//初始化函数static cocos2d::CCScene* scene();//场景创建函数// void menuCloseCallback(CCObject* pSender);// CREATE_FUNC(Myscene);//这个是必须要写的东西哦// void menuCallback(CCObject* pSender);//回调函数// void scheCallback(float dt);//计时器的回调函数//void update(float dt);//计时器的回调函数//CCLabelTTF* label;//int n;//char str[50];};《二》Myscene.cpp中的文件#include"Myscene.h"#include"HelloWorldScene.h"using namespace cocos2d;//命名空间2种写法USING_NS_CC;//USING_NS_CC;Myscene::Myscene()//构造函数{}Myscene::~Myscene()//析构函数{}CCScene* Myscene::scene()//场景和层的创建{CCScene *scene = CCScene::create(); //创建一个场景Myscene *layer = Myscene::create();//创建一个层scene->addChild(layer);//把层加到场景中return scene;//返回到场景}bool Myscene::init()//函数的初始化,场景中的东西都在这里写的{return true;}这样一个空的场景就创建好了,但是我们在控制台上只能看见一个黑框框,什么都没有。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
CCTransitionSlideInT::transitionWithDuration(t,s);//场景从上移入推出原场景
CCTransitionSlideInB::transitionWithDuration(t,s);//场景从下入推出原场景
cocos2d-x初探学习笔记(6)--场景间切换效果cocos2d-x初探学习笔记(6)--场景间切换效果
小满(bill man)个人原创,欢迎转载,转载请注明地址,小满(bill man)的专栏地址/bill_man
Cocos2d-x提供了很多场景间切换的效果,可以方便大家使用(很多是在Kjava时代都需要程序员自己来实现的效果)。
CCTransitionRadialCCW::transitionWithDuration(t,s);//顺时针切入
CCTransitionRadialCW::transitionWithDuration(t,s);//逆时针切入
以下两个需要先设置摄像机,使用CCDirector::sharedDirector()->setDepthTest(true);
刚开始研究此引擎,如有错误之处,希望大家多多指正
下一篇写一下test类里面的其他场景
CCTransitionZoomFlipX::transitionWithDuration(t,s,kOrientationRightOver);//带缩放效果x轴右翻
CCTransitionZoomFlipY::transitionWithDuration(t,s,kOrientationUpOver);//带缩放效果y轴上翻
CCTransitionFade::transitionWithDuration(t,s);//淡出淡入,原场景淡出,新场景淡入
CCTransitionFade::transitionWithDuration(t,s,ccWHITE);//如果上一个的函数,带3个参数,则第三个参数就是淡出淡入的颜色
1.使用方法:
正常的无过渡场景的如果尚未建立场景(即游戏中的第一个场景),就是用pDirector->runWithScene(pScene);即可以使用相应场景,如果是替换场景,则使用CCDirector::sharedDirector()->replaceScene(this);替换相应的场景即可,而如果要使用场景间的切换效果来切换场景,则需要使用相应的切换方法即transitionWithDuration(当然不同效果的使用方法略有不同)生成相应场景,然后再通过CCDirector::sharedDirector()->replaceScene(this)来启动场景,也就是说这个给这个场景加了一个外包装,然后再启动,那么,这个场景就不是直接显示了,而是在场景的效果使用完了以后进入场景,起到过渡的效果。
CCTransitionZoomFlipAngular::transitionWithDuration(t,s,kOrientationRightOver);//带缩放效果有角度转的右翻
CCTransitionShrinkGrow::transitionWithDuration(t,s);//交错换
CCTransitionRotoZoom::transitionWithDuration(t,s);//转角换
CCTransitionMoveInL::transitionWithDuration(t,s);//新场景从左移入覆盖
CCTransitionMoveInR::transitionWithDuration(t,s);//新场景从右移入覆盖
一般此函数有两个参数,第一个是特效的切换时间,直接生成一个CCTime即可,例子中设定的时间是1.2s,对于很多场景的显示都很舒服,第二个是要进入的场景,有的会有第三个参数,会在下面介绍
2.test中的效果总结
CCTransitionJumpZoom::transitionWithDuration(t,s);//跳跃式,本场景先会缩小,然后跳跃进来
CCTransitionZoomFlipY::transitionWithDuration(t,s,kOrientationDownOver);//带缩放效果y轴下翻
CCTransitionZoomFlipAngular::transitionWithDuration(t,s,kOrientationLeftOver);//带缩放效果/有角度转的左翻
CCTransitionPageTurn::transitionWithDuration(t,s,false);//翻页,前翻
CCTransitionPageTurn::transitionWithDuration(t,s,true);//翻页,后翻
CCTransitionFadeTR::transitionWithDuration(t,s);//向右上波浪
CCTransitionFlipX::transitionWithDuration(t,s,kOrientationLeftOver);//x轴左翻
CCTransitionFlipX::transitionWithDuration(t,s,kOrientationRightOver);//x轴右翻
CCTransitionFlipY::transitionWithDuration(t,s,kOrientationUpOver);//y轴上翻
CCTransitionFlipY::transitionWithDuration(t,s,kOrientationDownOver);//y轴下翻
CCTransitionFlipAngular::transitionWithDuration(t,s,kOrientationLeftOver);//有角度转的左翻
CCTransitionMoveInT::transitionWithDuration(t,s);//新场景从上移入覆盖
CCTransitionMoveInB::transitionWithDuration(t,s);//新场景从下移入覆盖
CCTransitionSlideInL::transitionWithDuration(t,s);//场景从左移入推出原场景
CCTransitionFlipAngular::transitionWithDuration(t,s,kOrientationRightOver);//有角度转的右翻
CCTransitionZoomFlipX::transitionWithDuration(t,s,kOrientationLeftOver);//带缩放效果x轴左翻
CCTransitionFadeBL::transitionWithDuration(t,s);//向左下波浪
CCTransitionFadeUp::transitionWithDuration(t,s);//向上百叶窗
CCTransitionFadeDown::transitionWithDuration(t,s);//向下百叶窗
CCTransitionTurnOffTiles::transitionWithDuration(t,s);//随机小方块
CCTransitionSplitRows::transitionWithDuration(t,s);//按行切
CCTransitionSplitCols::transitionWithDuration(t,s);//按列切
以下三个需要检测opengl版本是否支持CCConfiguration::sharedConfiguration()->getGlesVersion()<=GLES_VER_1_0如果为真则为不支持
CCTransitionCrossFade::transitionWithDuration(t,s);//淡出淡入交叉,同时进行