2.1cocos2dx-33种场景切换
Cocos2d-x简介系统教程
Cocos2d-x简介Cocos2d-x 是一个支持多平台的2D 手机游戏引擎,使用C++ 开发,基于OpenGL ES,基于Cocos2d-iphone,支持WOPhone, iOS 4.1, Android 2.1 及更高版本, WindowsXP & Windows7,WindowsPhone 8.Cocos2d-x是一个开源的移动2D游戏框架,特点用户创建跨平台的代码。
支持的平台是在iOS,Android的,WinPhone,Win32平台上,但可根据要求提供更多的平台。
主要功能流程控制(Flow control):非常容易地管理不同场景(scenes)之间的流程控制精灵(Sprites):快速而方便的精灵动作(Actions):告诉精灵们该做什么。
可组合的动作如移动(move)、旋转(rotate)和缩放(scale)等更多特效(Effects):特效包括波浪(waves)、旋转(twirl)和透镜(lens)等更多平面地图(Tiled Maps):支持包括矩形和六边形平面地图转换(Transitions):从一个场景移动到另外一个不同风格的场景菜单(Menus):创建内部菜单文本渲染(Text Rendering):支持标签和HTML标签动作上面说了那么多最主要的还是要有相关的教程才是最好的,那么看看下面的教程Cocos2d-x跨平台游戏开发课程内容共分为5个阶段:第一阶段主要了解、认识游戏开发,并为游戏开发做好准备工作;第二阶段则学习如何使用Cocos2d-x引擎进行进行游戏开发,它包含了Cocos2d-x引擎各个方面的基础知识点;第三阶段则学习游戏开发中一些常用的技术,包括网络,安全,优化,编辑器等运用,以及结合移动设备的特点和当前的市场环境,将游戏做得受欢迎;第四阶段则主要针对游戏引擎本身进行分析,以满足游戏开发中的各种扩展需要,甚至是开发和完善引擎本身;第五阶段就主要结合实际的商业项目,让开发者掌握游戏开发的全过程,包括策划,构架,管理等,以便能独立完成商业及游戏项目。
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方法。
OBS软件场景切换技巧分享
OBS软件场景切换技巧分享OBS(Open Broadcaster Software)是一款功能强大的开源直播软件,广泛应用于游戏直播、视频录制和在线教育等领域。
作为一名OBS用户,掌握场景切换技巧是非常重要的,它可以帮助我们实现画面的流畅转换,提升直播或录制视频的质量。
本文将分享一些常用的OBS软件场景切换技巧,希望对大家有所帮助。
一、了解OBS场景切换基础在开始分享具体技巧之前,我们先来了解一下OBS场景切换的基础知识。
OBS软件中的场景(Scene)可以理解为不同的布局,每个场景可以包含多个源(Source),比如视频源、音频源、图像源等。
当我们切换场景时,OBS会自动隐藏当前场景的源,并显示目标场景的源,从而实现画面的切换。
二、使用场景快捷键OBS提供了一些快捷键,可以帮助我们快速切换场景。
在OBS设置中的“热键”选项中,我们可以设置不同的快捷键来切换场景。
比如,我们可以将F1键设置为切换到场景一,F2键设置为切换到场景二,以此类推。
这样,当我们直播或录制视频时,只需按下对应的快捷键,即可快速切换场景,提高操作效率。
三、使用场景过渡效果为了使场景切换更加流畅和美观,OBS还提供了一些过渡效果。
在OBS的“过渡”选项中,我们可以选择不同的过渡效果,比如淡入淡出、滑动、闪烁等。
当我们切换场景时,这些过渡效果会以动画的形式呈现,使画面更加平滑过渡,给观众带来更好的视觉体验。
四、使用自动场景切换插件如果我们需要自动切换场景,比如定时切换广告或不同的画面布局,可以考虑使用OBS的自动场景切换插件。
这些插件可以根据预设的时间或条件,自动切换场景,减少手动操作的繁琐。
通过设置插件的参数,我们可以实现多种切换模式,如轮播模式、随机模式等,灵活应对不同的直播或录制需求。
五、使用场景预设在OBS中,我们可以创建场景预设,将常用的场景和源保存为预设,以备后续使用。
当我们需要切换到某个特定的场景时,只需选择对应的预设,OBS会自动加载该场景及其源。
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不同⽽已,并在切换时添加具体的切换效果即可。
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);
切换场景创意设计方案
切换场景创意设计方案在切换场景创意设计方案中,主要考虑如何通过切换场景来实现故事的连贯性和吸引观众的注意力。
以下是一个切换场景创意设计方案的示例。
1. 具体情境的切换:利用舞台装置、灯光和影片投影等手段,实现不同情境的切换。
例如,在一个舞台上,通过将舞台一分为二,利用两面不同的装置和灯光效果,来表现不同的情境。
同时,通过投影机将适合情境的背景影片投影在舞台背景,进一步增强切换的视觉效果。
2. 时间和空间的切换:通过人物的表演和舞台设置,实现时间和空间的切换。
例如,在戏剧中,通过人物的表演和服装的变化,表现出时间的流逝和故事场景的改变。
同时,通过舞台的移动、转动和升降等设置,展现不同地点和空间的切换。
3. 故事线的切换:利用音乐和表演,将不同故事线的切换更加流畅和连贯。
例如,在音乐剧中,通过音乐和舞蹈的编排,将不同故事线的转换融入到表演中,使观众能够无缝地跟随故事的发展。
4. 视觉效果的切换:利用舞台装置、灯光和特殊效果,创造出独特的视觉效果,吸引观众的注意力。
例如,在舞台上搭建一个旋转台,通过不同角度的旋转,展示出不同景象和场景的切换。
同时,通过灯光的变化和特殊效果的运用,增强视觉的冲击力。
5. 想象和幻觉的切换:通过舞台装置、景物和投影等手段,创造出梦幻般的场景和幻觉效果。
例如,在一个舞台上,通过悬挂的云朵、光影的变化和投影的幻像,呈现出一个神秘的幻境。
观众可以在这个幻境中与角色共同体验故事的发展。
6. 多媒体的切换:利用不同的媒体和技术手段,将故事中的不同场景切换得更加有趣和吸引人。
例如,在舞台上设置一个巨大的屏幕,通过投影和音效,展现出不同的场景和人物形象。
观众可以通过这种多媒体的切换,更好地理解故事情节和人物性格的转变。
总体而言,切换场景的创意设计方案需要考虑故事内容、观众的接受程度和舞台技术的可行性等因素。
只有将这些因素综合考虑,并合理利用舞台装置、灯光、影片投影、音乐和表演等手段,才能实现切换场景的效果,提升观众的观赏体验。
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的例子
cocos2d的例子
以下是一些Cocos2d的例子:
1. HelloWorld:这是一个最简单的Cocos2d示例,显示一个“Hello, World!”的标签。
2. Sprite:这个例子展示了如何创建和移动一个精灵(Sprite)。
3. Animation:这个例子展示了如何使用帧动画创建一个精灵动画。
4. Touch:这个例子展示了如何处理触摸事件,通过触摸来移动一个精灵。
5. Physics:这个例子展示了如何使用物理引擎来模拟物体的运动和碰撞。
6. Particle:这个例子展示了如何使用粒子系统创建各种特效,如爆炸、烟雾等。
7. Audio:这个例子展示了如何播放背景音乐和音效。
8. Menu:这个例子展示了如何创建一个菜单,并处理菜单项的点击事件。
9. Transition:这个例子展示了如何使用过渡效果来切换场景。
10. TileMap:这个例子展示了如何使用瓦片地图来创建游戏地图。
以上是一些常见的Cocos2d示例,你可以在Cocos2d的官方网站或GitHub上找到更多的示例代码和教程。
cocos2dx 面试题
cocos2dx 面试题1. 介绍Cocos2d-x引擎Cocos2d-x是一个开源的跨平台游戏开发框架,可用于创建2D和小型3D游戏。
它提供了丰富的功能和工具,适用于多种平台,包括iOS、Android、Windows、MacOS和Web等。
Cocos2d-x使用C++编程语言,具有高效的性能和灵活的扩展性。
2. Cocos2d-x的特点- 跨平台支持:Cocos2d-x可以在不同的移动设备和操作系统上运行,提供了对不同平台的一致支持。
- 强大的功能:Cocos2d-x提供了丰富的游戏开发功能,包括场景管理、精灵动画、碰撞检测、图像处理和音频管理等。
- 高性能:Cocos2d-x采用C++编写,具有优秀的性能,并针对不同平台进行了优化。
- 易学易用:Cocos2d-x提供了清晰简洁的API和文档,使开发者可以快速上手并进行游戏开发。
- 社区支持:Cocos2d-x拥有庞大的开发者社区,提供了丰富的教程、示例代码和插件扩展等资源。
3. Cocos2d-x的基本架构Cocos2d-x的基本架构由以下几个部分组成:- 场景(Scene):游戏中的一个逻辑场景,可以包含多个层(Layer)。
- 层(Layer):包含游戏中的各个元素和逻辑,如精灵、动画和碰撞检测等。
- 精灵(Sprite):游戏中的可见对象,可以设置位置、大小、动画和纹理等属性。
- 动作(Action):用于实现游戏中的各种动画效果,如移动、旋转和渐变等。
- 调度器(Scheduler):用于管理游戏的更新和定时任务,可以按照指定的时间间隔执行代码。
- 触摸(Touch):接收用户的输入,如点击、滑动和多点触控等。
- 物理引擎(Physics Engine):用于模拟游戏中物体的运动和碰撞效果。
4. Cocos2d-x的优化技巧- 使用图像压缩:优化游戏中的图像资源,减少内存占用和加载时间。
- 纹理合批:将多个相邻的精灵合并为一个纹理,减少绘制调用次数。
旅游场景切换转场方案
旅游场景切换转场方案在旅游行业,为了提升用户的体验感,场景切换和转场的设计变得越来越重要。
场景切换和转场是指在用户游玩游戏或旅游时,由一个场景或景点切换至另外一个场景或景点时的衔接设计。
好的转场设计能够起到过渡作用,使用户的旅游体验更加自然、流畅和真实。
下面将介绍一些旅游场景切换转场方案:方案一:淡入淡出淡入淡出是一种较为常见的转场设计方案。
在场景切换时,让新场景逐渐从透明变成不透明,较旧场景则逐渐从不透明变成透明。
这种方案的优点在于转场过渡比较渐进,可以使用户感到自然流畅。
但是,如果转场时间过长,会影响用户体验。
方案二:对半分割对半分割转场方案是指将场景从中间分成两半,一边是旧场景,另一边是新场景,然后将旧场景一半缩小,新场景一半扩大,最终两个场景通过半分屏幕相遇的方式合并到一起。
这种方案的优点在于场景转换速度较快,可以保证用户的旅游体验感。
方案三:滑动式转换滑动式转换是指新场景从原场景下拉或上拉进入的转换方式。
新场景从页面下方进入并将旧场景推向顶部,或从页面上方进入并将旧场景推向底部。
这种方式适合用于场景切换的桥段较短的情况。
此外,新场景的滑动方向可以根据具体情况进行设计。
方案四:谷底旋转谷底旋转方案是指新场景从旧场景的边角处旋转进入,并将旧场景旋转至谷底,并回到原位。
这种方式适用于旧场景和新场景相似性较大的情况下使用。
该方案需要较高的设计技术,需要配合音效、图形和单色的处理,方能达到完美的效果。
方案五:圆形转换圆形转换是指新场景从旧场景的边角处进入,并由圆形扩散式转出,旧场景则消失在圆形之外。
这种方式适用于新场景与旧场景差异较大的情况下使用。
如果新场景布局与旧场景布局较为对称,则可以有效地利用圆形效果,帮助过渡衔接场景。
以上是旅游场景切换转场方案的一些介绍,每种转换方案都有其适合的场景和特点,设计师可以根据实际需求,选择最适合的方案,来提升用户的旅游体验感。
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 引擎 基本工作原理
cocos2d 引擎基本工作原理
cocos2d 引擎的基本工作原理可以分为以下几个方面:
1. 场景渲染:在cocos2d 中,渲染的根节点是CCScene(它是CCNode 的子类)。
CCScene 负责管理和渲染所有的节点。
然而,在drawScene() 方法中并没有像draw() 方法那样的直接绘制方法。
这是因为在渲染之前,引擎会对场景中的节点进行一些预处理,如旋转、缩放等。
这些操作是通过visit() 方法实现的,visit() 是一个定义在CCNode 中的虚方法,CCScene 中并没有单独实现它。
在渲染过程中,节点的纹理会根据节点的anchorPoint(定位点)进行定位。
anchorPoint 定义了贴图相对于节点位置的偏移,只有当节点拥有贴图时,这个定位点才有效。
2. 物理引擎:cocos2d 还包含了物理引擎,这是为了模拟真实世界的物理规律,使游戏角色能进行自由落体、抛物线运动、反弹、碰撞等效果。
物理引擎的实现已经内置在引擎中,开发者不需要自己编写物理算法,只需要掌握引擎提供的API 和方法就可以使用。
在物理世界中,物理引擎会通过模拟引力、摩擦力、碰撞反应等物理规律来影响和控制游戏角色的行为。
总的来说,cocos2d 引擎的工作原理可以概括为场景渲染和物理模拟两个方面。
场景渲染通过节点系统来实现,每个节点都有自己的状态和行为,这些节点会被组织成场景,并进行渲染和显示。
物理模拟则通过物理引擎来实现,模拟真实世界的物理规律,影响和控制游戏角色的行为。
这两个方面共同构成了cocos2d 引擎的基本工作原理。
JavaScript强化教程cocosjs场景切换
主要介绍:JavaScript强化教程—— cocosjs场景切换场景切换在main.js,将StartScene作为我们初始化运行的场景,代码如下:cc.LoaderScene.preload(g_resources, function () {cc.director.runScene(new PlayScene());}, this);在StartScene的开始菜单按钮的响应函数中加入场景切换代码。
点击开始按钮切换场景进入到我们的PlayScene。
代码如下:var startItem = new cc.MenuItemImage(res.Start_N_png,res.Start_S_png,function () {cc.log("Menu is clicked!");cc.director.replaceScene( cc.TransitionPageTurn(1 , new PlayScene(), false) );}, this);cc.director用来获取导演单例实体,cc.TransitionPageTurn创建了一个翻页效果的场景切换动画,当然你也可以不使用转场动画。
直接传入new SecondScene()。
Cocos2d-JS中场景之间通过TransitionScene系列类来实现过渡跳转的效果。
TransitionScene继承于Scene,该系列类主要是与场景切换特效相关的一些使用类。
如TransitionFadeDown、TransitionPageTurn、TransitionJumpZoom等等。
注意:转场动画需要小心浏览器的兼容性。
比如翻页效果就在浏览器上不支持。
Cocos2d-x设计模式
Cocos2dx 设计模式设计模式在程序设计中会经常用到,也许你从来没有留意过设计模式,其实你却一直在使用设计模式!Cocos2d-x中有不少的设计模式,本系列教程主要讨论Cocos2d-x中的设计模式,看看引擎都使用了哪些设计模式,我们今后写代码要怎样使用某种设计模式。
如果有任何错误还请留言指教,互相探讨。
设计模式之观察者模式详解什么是观察者一个目标对象可以注册多个观察者,当目标对象的状态改变的时候,可以通知观察者对象作出相应的响应。
这是标准的观察者模式的实现。
观察者模式又称为发布-订阅模式。
优缺点优点:- 实现了目标对象和观察者之间的抽象耦合,在本例中,则是实现了消息与观察者的抽象耦合。
可以定义一种消息与消息处理对象的一对多的关系,而不用担心彼此的实现细节。
缺点:- 如果一个被观察者对象有很多的直接和间接的观察者的话,将所有的观察者都通知到会花费很多时间。
适用场合一个抽象模型有两个方面,其中一个方面依赖于另一个方面。
将这些方面封装在独立的对象中使它们可以各自独立地改变和复用。
一个对象的改变将导致其他一个或多个对象也发生改变,而不知道具体有多少对象将发生改变,可以降低对象之间的耦合度。
一个对象必须通知其他对象,而并不知道这些对象是谁。
需要在系统中创建一个触发链,A 对象的行为将影响B对象,B对象的行为将影响C对象……,可以使用观察者模式创建一种链式触发机制。
JAVA实现采用发布-订阅模式,例如报社(被观察者)有很多订阅者(观察者),每天的早晨有新报纸就通知所有的订阅者。
Office.java:报社1 2 3 4 5 6 7 8 910111213 public interface Office {//添加观察者public void addObserver(People p);//删除观察者public void deleteObserver(People p); //通知所有的观察者public void notifyObservers(String msg); }People.java:人public interface People {//收到来自观察者的消息public void update(String msg);}BrightOffice.java:光明日报1 2 3 4 5 6 7 8 910111213141516171819 public class BrightOffice {//所有观察者的集合private ArrayList<People> peopleList = new ArrayList<People>(); public void addObserver(People p) {this.peopleList.add(p);}public void deleteObserver(Observer o) {this.peopleList.remove(o);}public void notifyObservers(String msg) {for (People p : peopleList) {p.update(msg);}}//通知public void publish() {this.notifyObservers("今天出新报纸啦!");}}OldPeople.java:老人1 2 3 4 5 6 public class OldPeople implements People{public void update(String msg) {System.out.println(msg);System.out.println("我要去取今天的新报纸啦!"); }}Test.java:测试程序1 2 3 4 5 6 7 8 public class Test {public static void main(String[] args) {People p1 = new OldPeople();BrightOffice brightOffice = new BrightOffice(); brightOffice.addObserver(p1);brightOffice.publish();}}Cocos2d-x中的观察者在Cocos2d-x中被观察者是NotificationCenter,但它不是通过自身状态改变来通知观察者,而是通过显示地发送观察者感兴趣的消息(postNotification)来通知它们。
场景切换
addChild(pmenu);
retur::scene2()
{
CCScene *pScene2=CCScene::create();
layer2 *pLayer2=layer2::create();
pMenu->setPosition(ccp(0,0));
addChild(pMenu);
return true;
}
void layer1::backmenu(CCObject * obj)
{
CCDirector::sharedDirector()->replaceScene(layer2::scene2());
pScene2->addChild(pLayer2);
return pScene2;
}
void layer2::menuback( CCObject *obj )
{
CCDirector::sharedDirector()->replaceScene(layer1::scene());
}
#pragma once
#include "cocos2d.h"
class layer1:public cocos2d::CCLayer
{
public:
virtual bool init();
static cocos2d::CCScene *scene();
void backmenu(CCObject * obj);
CCSprite *pSprite2=CCSprite::create("1.jpg");
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字符串整理及字符串转换方法总结在cocos2d-x中,我们常常都需要用到字符串,但每种编程语言都存在大量字符串,cocos2d-x也不例外。
在编程中,由于字符串比较多,我们常常不知道用哪一个字符串好些,对字符串间的转换也很是迷茫,特别是对于新手cocos2d-x开发者来说,这种情况太多了。
为让大家能够能好的使用cocos2d-x的字符串,小编就再当一次红领巾为大家整理整理吧,希望对大家有帮助。
在Cocos2d-x中,主要有constchar*、std::string和cocos2d::__String等几种字符串。
其中const char*是C风格的字符串,std::string是C++风格的字符串,它封装了const char*。
只有cocos2d::__String才是Cocos2d-x引擎提供的字符串类,这些字符串之间都可以互相转换,且它们都应用在不同的场景下。
1、const char*和std::stringstd::string是一个类,特点是面向对象,const char*不是类。
初始化std::string对象:std::string name = "tony";std::string name = std::string("tony");把std::string转化为const char*类型:const char* cstring =name.c_str();2、cocos2d::__Stringcocos2d::__String是Cocos2d-x通过的一个字符串类,它的设计模拟了Objective-C 的NSString类,这由于Cocos2d-x源自于Cocos2d-iphone,cocos2d::__String也是基于Unicode双字节编码。
创建它的主要的静态create函数如下:static__String * create (const std::string &str)static__String * createWithFormat (const char *format,...)使用create函数的实例代码如下:__String* name= __String::create("Hi,Tony");int num=123;__String* ns = __String::createWithFormat("%d",num);3、cocos2d::__String数据类型之间的转换函数cocos2d::__String转换为const char*类型:__String* name= __String::create("Hi,Tony");const char *cstring=name->getCString();const char*转换为cocos2d::__String类型:const char* cstring = "Hi,Tony";__String*ns=__String::createWithFormat("%s",cstring);std::string转换为cocos2d::__String类型:std::string string = "Hi,Tony";__String*ns=__String::createWithFormat("%s",string.c_str());cocos2d::__String转换为int类型:int num = 123;__String* ns =__String::createWithFormat("%d",num);int num2 = ns->intValue();cocos2d-x程序猿你们明了么,没清楚的小伙伴就赶紧收藏慢慢研究吧。
Cocos2d-X开发创建场景步骤
Cocos2d-x中创建场景,是在HelloWorld工程的基础上的操作首先,在Classes文件夹中添加一个类:二,单击右键并且选择添加三,选择类四,单击添加五、在类名中输入MySence后单击完成单击完成后添加的MyScene类中的两个文件MySenece.h和MySence.cpp文件会添加到W32.projecte目录下,需要将这两个文件复制到HelloWorld工程下的Classes文件中然后将鼠标指向解决方案目录下的Classes目录上单击右键,选择添加选择现有项选择需要添加的文件,MScence.h文件和MySence.cpp文件,然后单击添加添加完成后可以看到Classes文件夹中多了两个文件MySence.h和MySence.cpp文件在MySence.h中添加下面的代码:1.#pragma once2.#include "cocos2d.h"3.ing namespace cocos2d;5.6.class MySence : public CCLayer7.{8.public:9. MySence(void);10. ~MySence(void);11. virtual bool init();12. static CCScene *scene();13.14. CREATE_FUNC(MySence);15.};在MySence.cpp中添加下面的代码1.#include "MySence.h"2.3.4.MySence::MySence(void)5.{6.}7.8.9.MySence::~MySence(void)10.{11.}12.Scene* MySence::scene()14.{15. CCScene *scene = CCScene::create();16.17. MySence *layer = MySence::create();18.19. scene->addChild(layer);20.21. return scene;22.}23.24.bool MySence::init()25.{26. return true;27.}打开AppDelegate.cpp文件,在AppDelegate.cpp文件中添加头头文件"MySence.h",最后将AppDelegate.cpp文件中的boolAppDelegate::applicationDidFinishLaunching() 函数里面的 CCScene *pScene = HelloWorld::scene(),改成CCScene *pScene = MySence::scene();程序执行结果:(程序中显示的是笔者自己创建的一个场景)如需了解更多cocos2d-x开发知识,请至麦子学院官网查看。
cocos2dx菜鸟教程
cocos2dx菜鸟教程Cocos2dx菜鸟教程Cocos2dx是一个开源的跨平台游戏开发框架,适用于开发2D和3D游戏。
本教程将介绍Cocos2dx的基本概念和使用方法,适合初学者。
第一步,安装Cocos2dx1. 下载Cocos2dx框架并解压至指定目录。
2. 配置Cocos2dx环境变量。
3. 创建新的Cocos2dx项目。
第二步,了解Cocos2dx的基本概念1. 游戏场景(Scene):游戏中的一个场景,包含角色、背景、音效等内容。
2. 图层(Layer):作为场景的一部分,可以添加和显示游戏对象。
3. 精灵(Sprite):游戏中的角色或游戏对象,可以移动、旋转等。
4. 动画(Animation):将连续的帧组合成一个动画效果。
5. 物理引擎(Physics Engine):模拟物体之间的力学效果,使游戏更加真实。
第三步,创建一个简单的游戏1. 新建一个Cocos2dx项目。
2. 创建游戏场景,并在场景中添加精灵和动画。
3. 添加游戏逻辑,如碰撞检测、得分计算等。
4. 编译并运行游戏。
第四步,进阶1. 学习使用Cocos Studio创建UI界面。
2. 使用Cocos2dx实现多人联网游戏。
3. 优化游戏性能,减少资源占用和加载时间。
4. 发布游戏,将其打包成可执行文件或移植到其他平台。
总结本教程介绍了Cocos2dx的基本概念和使用方法,希望能帮助菜鸟们快速入门。
在学习过程中,可以参考官方文档和其他教程,不断提升自己的技术水平。
祝大家在Cocos2dx游戏开发的道路上取得成功!。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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是向前翻。
[16]:CCTransitionProgressHorizontal::create(时间,目标场景); //本场景从左到右消失同时另一场景出现[17]:CCTransitionProgressInOut::create(时间,目标场景);//本场景从中间到四周消失同时另一场景出现[18]:CCTransitionProgressOutIn::create(时间,目标场景);//本场景从四周到中间消失同时另一场景出现[19]:CCTransitionProgressRadialCCW::create(时间,目标场景); //本场景逆时针消失到另一场景[20]:CCTransitionProgressRadialCW::create(时间,目标场景);//本场景顺时针消失到另一场景[21]:CCTransitionProgressVertical::create(时间,目标场景);//本场景从上到下消失同时另一场景出现[22]:CCTransitionRotoZoom::create(时间,目标场景);//本场景旋转消失后另一场景旋转出现[23]:CCTransitionShrinkGrow::create(时间,目标场景);//本场景缩小切换到另一场景放大[24]:CCTransitionSlideInB::create(时间,目标场景);//本场景向上滑动到另一场景[25]:CCTransitionSlideInL::create(时间,目标场景);//本场景向右滑动到另一场景[26]:CCTransitionSlideInR::create(时间,目标场景);//本场景向左滑动到另一场景[27]:CCTransitionSlideInT::create(时间,目标场景);//本场景向下滑动到另一场景[28]:CCTransitionSplitCols::create(时间,目标场景);//本场景三矩形上下消失后另一场景三矩形上下出现[29]:CCTransitionSplitRows::create(时间,目标场景);//本场景三矩形左右消失后另一场景三矩形左右出现[30]:CCTransitionTurnOffTiles::create(时间,目标场景);//本场景小方块消失到另一场景[31]:CCTransitionZoomFlipAngular::create(时间,目标场景,样式); //本场景翻转消失到另一场景(斜上方)//样式(可以不写)://kCCTransitionOrientationLeftOver(左向右翻转)//kCCTransitionOrientationRightOver(右向左翻转)[32]:CCTransitionZoomFlipX::create(时间,目标场景,样式);//本场景翻转消失到另一场景(X轴)//样式(可以不写)://kCCTransitionOrientationLeftOver(左向右翻转)//kCCTransitionOrientationRightOver(右向左翻转)[33]:CCTransitionZoomFlipY::create(时间,目标场景,样式);//本场景翻转消失到另一场景(Y轴)//样式(可以不写)://kCCTransitionOrientationUpOver(下向上翻转)//kCCTransitionOrientationDownOver(上向下翻转)【三】:新建场景问题如果我说下面你自己用这些函数去做个场景切换特效你会怎么做呢?你是不是会咆哮:“他娘的老子想问的不是怎么切换,而是他娘的怎么创建新场景,你丫的之前木说过啊有木有。
”好吧,我说过不到你用的时候和你说了也白说。
所以,现在告诉你。
其实创建一个新场景非常简单。
复制即可。
(什么?你让老子复制什么?)复制一下自动生成的helloworld.h和helloworld.cpp。
因为他们两在一起,就是一个scene,你只要复制一下,然后改个名字就能用了。
记得要在文件夹里复制哦,就像这样。
当然这是偷懒的办法,你也可以直接新建.h和.cpp文件,然后自己写。
然后我们在vs里把他们加载进来。
然后这里注意!注意!注意!你新建的.h文件的这些地方一定要改掉,不能和其他已有的重复。
否则后果自负。
.cpp文件的也要改哦,么么哒!另外说一下生命周期函数virtual void onEnter();virtual void onEnterTransitionDidFinish();virtual void onExit();这3个是遇到对应情况时调用的。
在cpp文件里如果把它们示例了,你可以在开始时放音乐,结束时关闭音乐等等。
如果他下面的之类需要调用这三个函数,那你就必须写上,否则之类无法继承。
如果你没有必要的操作,不写也可以。
调用顺序:场景2的init函数场景2的onEnter函数场景1的onExit函数场景2的onEnterTransitionDidFinish函数好了,新建一个场景,你会了吗?我们继续吧。
【四】:示例1.新建项目Scenedemo2.新建scene Scenedemo2(怎么创建会了吧)3.载入2张不同的图,用于创建2个场景Scenedemo.h1.创建一个回调函数用于切换场景void changescene(CCObject* pSender);2.创建3个生命周期函数virtual void onEnter();virtual void onEnterTransitionDidFinish();virtual void onExit();Scenedemo.cpp1.包含Scenedemo2.h #include "Scenedemo2.h"2.初始化函数中创建切换菜单//-new-//CCSize mysize=CCDirector::sharedDirector()->getWinSize();CCSprite* sp = CCSprite::create("HelloWorld1.png");sp->setPosition(ccp(mysize.width/2, mysize.height/2));this->addChild(sp, 0);//创建一个菜单CCMenuItemFont * fontitem=CCMenuItemFont::create("turn2",this,menu_selector(Scenedemo::changescene));fontitem->setPosition(ccp(CCDirector::sharedDirector()->getWinSize().width/2, 20)); CCMenu* turnmenu = CCMenu::create(fontitem, NULL);turnmenu->setPosition(CCPointZero);this->addChild(turnmenu, 1);//-new-//3.实现changescene回调函数void Scenedemo::changescene(CCObject* pSender){//新建一个Scenedemo2的sceneCCScene * scene2=Scenedemo2::scene();////CCTransitionCrossFade切换方式//CCTransitionScene * s1=CCTransitionCrossFade::create(2,scene2); //CCDirector::sharedDirector()->replaceScene(s1);////CCTransitionFade切换方式//CCTransitionScene * s2=CCTransitionFade::create(2,scene2);//CCDirector::sharedDirector()->replaceScene(s2);////CCTransitionFadeBL切换方式//CCTransitionScene * s3=CCTransitionFadeBL::create(2,scene2);//CCDirector::sharedDirector()->replaceScene(s3);////CCTransitionFadeDown切换方式//CCTransitionScene * s4=CCTransitionFadeDown::create(2,scene2); //CCDirector::sharedDirector()->replaceScene(s4);////CCTransitionFadeTR切换方式//CCTransitionScene * s5=CCTransitionFadeTR::create(2,scene2);//CCDirector::sharedDirector()->replaceScene(s5);////CCTransitionFadeUp切换方式//CCTransitionScene * s6=CCTransitionFadeUp::create(2,scene2);//CCDirector::sharedDirector()->replaceScene(s6);////CCTransitionFlipAngular切换方式//CCTransitionScene *s7=CCTransitionFlipAngular::create(2,scene2,kCCTransitionOrientationRightOver); //CCDirector::sharedDirector()->replaceScene(s7);//CCTransitionFlipX切换方式CCTransitionScene * s8=CCTransitionFlipX::create(2,scene2);CCDirector::sharedDirector()->replaceScene(s8);////CCTransitionFlipY切换方式//CCTransitionScene * s9=CCTransitionFlipY::create(2,scene2);//CCDirector::sharedDirector()->replaceScene(s9);////CCTransitionJumpZoom切换方式//CCTransitionScene * s10=CCTransitionJumpZoom::create(2,scene2);//CCDirector::sharedDirector()->replaceScene(s10);////CCTransitionMoveInB切换方式//CCTransitionScene * s11=CCTransitionMoveInB::create(2,scene2);//CCDirector::sharedDirector()->replaceScene(s11);////CCTransitionMoveInL切换方式//CCTransitionScene * s12=CCTransitionMoveInL::create(2,scene2);//CCDirector::sharedDirector()->replaceScene(s12);////CCTransitionMoveInT切换方式//CCTransitionScene * s13=CCTransitionMoveInT::create(2,scene2);//CCDirector::sharedDirector()->replaceScene(s13);////CCTransitionMoveInR切换方式//CCTransitionScene * s14=CCTransitionMoveInR::create(2,scene2);//CCDirector::sharedDirector()->replaceScene(s14);////CCTransitionPageTurn切换方式//CCTransitionScene * s15=CCTransitionPageTurn::create(2,scene2,false);//CCDirector::sharedDirector()->replaceScene(s15);////CCTransitionProgressHorizontal切换方式//CCTransitionScene * s16=CCTransitionProgressHorizontal::create(2,scene2); //CCDirector::sharedDirector()->replaceScene(s16);////CCTransitionProgressInOut切换方式//CCTransitionScene * s17=CCTransitionProgressInOut::create(2,scene2);//CCDirector::sharedDirector()->replaceScene(s17);////CCTransitionProgressOutIn切换方式//CCTransitionScene * s18=CCTransitionProgressOutIn::create(2,scene2);//CCDirector::sharedDirector()->replaceScene(s18);////CCTransitionProgressRadialCCW切换方式//CCTransitionScene * s19=CCTransitionProgressRadialCCW::create(2,scene2); //CCDirector::sharedDirector()->replaceScene(s19);////CCTransitionProgressRadialCW切换方式//CCTransitionScene * s20=CCTransitionProgressRadialCW::create(2,scene2); //CCDirector::sharedDirector()->replaceScene(s20);////CCTransitionProgressVertical切换方式//CCTransitionScene * s21=CCTransitionProgressVertical::create(2,scene2);//CCDirector::sharedDirector()->replaceScene(s21);////CCTransitionRotoZoom切换方式//CCTransitionScene * s22=CCTransitionRotoZoom::create(2,scene2);//CCDirector::sharedDirector()->replaceScene(s22);////CCTransitionShrinkGrow切换方式//CCTransitionScene * s23=CCTransitionShrinkGrow::create(2,scene2);//CCDirector::sharedDirector()->replaceScene(s23);////CCTransitionSlideInB切换方式//CCTransitionScene * s24=CCTransitionSlideInB::create(2,scene2);//CCDirector::sharedDirector()->replaceScene(s24);////CCTransitionSlideInL切换方式//CCTransitionScene * s25=CCTransitionSlideInL::create(2,scene2);//CCDirector::sharedDirector()->replaceScene(s25);////CCTransitionSlideInR切换方式//CCTransitionScene * s26=CCTransitionSlideInR::create(2,scene2);//CCDirector::sharedDirector()->replaceScene(s26);////CCTransitionSlideInT切换方式//CCTransitionScene * s27=CCTransitionSlideInT::create(2,scene2);//CCDirector::sharedDirector()->replaceScene(s27);////CCTransitionSplitCols切换方式//CCTransitionScene * s28=CCTransitionSplitCols::create(2,scene2);//CCDirector::sharedDirector()->replaceScene(s28);////CCTransitionSplitRows切换方式//CCTransitionScene * s29=CCTransitionSplitRows::create(2,scene2);//CCDirector::sharedDirector()->replaceScene(s29);////CCTransitionTurnOffTiles切换方式//CCTransitionScene * s30=CCTransitionTurnOffTiles::create(2,scene2);//CCDirector::sharedDirector()->replaceScene(s30);////CCTransitionZoomFlipAngular切换方式//CCTransitionScene * s31=CCTransitionZoomFlipAngular::create(2,scene2);//CCDirector::sharedDirector()->replaceScene(s31);////CCTransitionZoomFlipX切换方式//CCTransitionScene * s32=CCTransitionZoomFlipX::create(2,scene2); //CCDirector::sharedDirector()->replaceScene(s32);////CCTransitionZoomFlipY切换方式//CCTransitionScene * s33=CCTransitionZoomFlipY::create(2,scene2); //CCDirector::sharedDirector()->replaceScene(s33);}Scenedemo2.h1.创建一个回调函数用于切换场景void changescene(CCObject* pSender);2.创建3个生命周期函数virtual void onEnter();virtual void onEnterTransitionDidFinish();virtual void onExit();和Scenedemo1.h一样Scenedemo2.cpp1.包含Scenedemo.h #include "Scenedemo.h"2.初始化函数中创建切换菜单CCSize mysize=CCDirector::sharedDirector()->getWinSize(); CCSprite* sp = CCSprite::create("HelloWorld2.png");sp->setPosition(ccp(mysize.width/2, mysize.height/2));//设置不同颜色区分sp->setColor(ccc3(100,100,100));this->addChild(sp, 0);//创建一个菜单CCMenuItemFont * fontitem=CCMenuItemFont::create("turnback",this,menu_selector(Scenedemo2::changescene));fontitem->setPosition(ccp(CCDirector::sharedDirector()->getWinSize().width/2, 20)); CCMenu* turnmenu = CCMenu::create(fontitem, NULL);turnmenu->setPosition(CCPointZero);this->addChild(turnmenu, 1);3.实现changescene回调函数void Scenedemo2::changescene(CCObject * obj){//新建一个Scenedemo的sceneCCScene * scene1=Scenedemo::scene();CCTransitionScene * ss=CCTransitionJumpZoom::create(2,scene1); CCDirector::sharedDirector()->replaceScene(ss);}好了,最后我们来欣赏一下效果吧。