不会去重复一些概念性的东西,具体的内容,我在代码中已经备注出来。先看目录,这个创建完项目目录的Classes文件夹下有4个文件,我把helloworld那两个文件直接改了名字,这里我叫MainScene 。切记,在改为名字之后需要到appDelegate.pp里面把对应的helloworld改过来。
废话不多说,直接上代码
1,appDelegate.h
[cpp] view plain copy print ? #ifndef_APP_DELEGATE_H_ #define_APP_DELEGATE_H_ #include"cocos2d.h" /** *cocos2d应用入口类 *官方解释这里使用私有继承的原因是隐藏了一些导演类的接口 *C++不是很懂,后期再好好研究下 */ classAppDelegate:privatecocos2d::Application { public: //构造函数,构造一个AppDelegate AppDelegate(); //析构函数,用于回收垃圾,释放空间,这里是虚函数,建议包括本人在内的newC++er好好补习下C++基础 //这里找到资料为:C++通过虚函数实现多态."无论发送消息的对象属于什么类,它们均发送具有同一形式的消息,对消息的处理方式可能随接手消息的对象而变"的处理方式被称为多态性。 virtual~AppDelegate(); *主程序的入口方法,在这里对导演和场景的初始化 @returntrue初始化success,应用continue. @returnfalse初始化Failed,应用terminate. virtualboolapplicationDIDFinishLaunching(); /** *程序转入背景运行函数 */ virtualvoIDapplicationDIDEnterBackground(); *程序恢复运行函数 virtualvoIDapplicationWillEnterForeground(); }; #endif//_APP_DELEGATE_H_
2,appDelegate.cpp
copy #include"AppDelegate.h" #include"MainScene.h"//这里原本是HelloWorldScene,我换了名字 //使用cocos2dx的命名空间,如果不使用的话,貌似有些cocos的字段显示无法识别 USING_NS_CC; //构建入口类 AppDelegate::AppDelegate(){ } //析构函数,用于垃圾回收 AppDelegate::~AppDelegate() { //启动程序入口 boolAppDelegate::applicationDidFinishLaunching(){ //初始化导演类 autodirector=Director::getInstance(); //通过导演类获取一个OpenGL坐标系 autoglview=director->getOpenGLView(); //如果没有获取到,创建一个坐标系界面,命名为Cocos2dxSceneShow if(!glview){ glview=GLView::create("Cocos2dxSceneShow"); director->setOpenGLView(glview); } //打开显示帧率 director->setDisplayStats(true); //设置默认帧率为1.0/60,即每秒60帧 director->setAnimationInterval(1.0/60); //创建一个允许被释放的场景MainScene autoscene=MainScene::scene(); //入口,运行这个MainScene场景 director->runWithScene(scene); returntrue; //暂停应用的时候调用。比如来了电话 voidAppDelegate::applicationDidEnterBackground(){ Director::getInstance()->stopAnimation(); //如果用了音乐等SimpleAudioEngine,这里需要加上 //SimpleAudioEngine::getInstance()->pauseBackgroundMusic(); //重新唤醒游戏调用 voidAppDelegate::applicationWillEnterForeground(){ Director::getInstance()->startAnimation(); //如果用了音乐等这里需加上 //SimpleAudioEngine::getInstance()->resumeBackgroundMusic(); }
3,MainScene.h(helloworld那个类)
copy #ifndef__MainScene_H__ #define__MainScene_H__ //创建一个MainScene类继承自cocos2d的Layer类 classMainScene:publiccocos2d::Layer public: //初始化函数,我用来定义组件 boolinit(); //创建一个场景 staticcocos2d::Scene*scene(); //转场第一个界面 voidonPushSceneOne(Ref*pSender); //转场第二个界面 voidonPushSceneTwo(Ref*pSender); //关闭方法 voidmenuCloseCallback(Ref*pSender); //创建场景宏 CREATE_FUNC(MainScene); }; #endif//__HELLOWORLD_SCENE_H__
4,MainScene.cpp
copy //这个类开始在项目生成的时候是helloworld类,这里我改了一下 #include"MainScene.h" //项目中调用了NewScene所以需要引用 #include"NewScene.h" #include"GameScene.h" //创建主场景 Scene*MainScene::scene() //使用场景类创建一个场景 autoscene=Scene::create(); //创建一个MainScene层 MainScene*layer=MainScene::create(); //把层添加到场景里面去 scene->addChild(layer); //返回一个场景 returnscene; //初始化一个MainScene层 boolMainScene::init() //层的初始化是否成功 if(!Layer::init()) returnfalse; //获取坐标系界面的屏幕可见区域 SizevisibleSize=Director::getInstance()->getVisibleSize(); //原点位置 Pointorigin=Director::getInstance()->getVisibleOrigin(); //创建一个关闭按钮,参数分别为,正常状态显示的图片,选中状态的图片, *** 作调用的方法即调用MainScene的menuCloseCallback方法 autocloseItem=MenuItemImage::create( "CloseNormal.png", "CloseSelected.png", CC_CALLBACK_1(MainScene::menuCloseCallback,this)); //设置关闭按钮的位置为视图的右下方 closeItem->setPosition(Point(origin.x+visibleSize.width-closeItem->getContentSize().width/2, origin.y+closeItem->getContentSize().height/2)); //创建菜单,请注意,最后一个参数一定是NULL automenu=Menu::create(closeItem,NULL); //初始化菜单的位置为原点位置,这个我也需要找个时间理解下 menu->setPosition(Point::ZERO); //把菜单添加到层中 this->addChild(menu,1); //在视图的正中间竖向位置添加2个图片按钮 autoitem1=MenuItemImage::create("btn-play-normal.png","btn-play-selected.png",CC_CALLBACK_1(MainScene::onPushSceneOne,this)); autoitem2=MenuItemImage::create("btn-about-normal.png","btn-about-selected.png",CC_CALLBACK_1(MainScene::onPushSceneTwo,this)); automenu_oper=Menu::create(item1,item2,226)"> menu_oper->alignItemsVerticallyWithPadding(50); this->addChild(menu_oper,1); returntrue; *进入NewScene的方法 voidMainScene::onPushSceneOne(Ref*pSender){ autoscene=Scene::create(); scene->addChild(SceneTestLayer::create()); Director::getInstance()->replaceScene(TransitionFlipX::create(.5,scene)); *进入GameScene的方法 voidMainScene::onPushSceneTwo(Ref*pSender){ scene->addChild(GameSceneLayer::create()); *关闭视窗的方法 *下面是官方定义好的一个宏,意思就是,当平台为wp8或者winRT会d出框 voidMainScene::menuCloseCallback(Ref*pSender) #if(CC_TARGET_PLATFORM==CC_PLATFORM_WP8)||(CC_TARGET_PLATFORM==CC_PLATFORM_WINRT) MessageBox("Youpressedtheclosebutton.WindowsStoreAppsdonotimplementaclosebutton.","Alert"); return; #endif Director::getInstance()->end(); #if(CC_TARGET_PLATFORM==CC_PLATFORM_IOS) exit(0); #endif 5,NewScene.h
copy #ifndef__NewScene_H__ #define__NewScene_H__ //创建一个SceneTestLayer类继承自cocos2d的Layer类 classSceneTestLayer:publiccocos2d::Layer //构造函数 SceneTestLayer(); //初始化函数 //返回主界面函数 voidbackToMainScene(Ref*sender); //创建SceneTestLayer层宏 CREATE_FUNC(SceneTestLayer) #endif
6,NewScene.cpp
copy #include"NewScene.h" USING_NS_CC; //构造函数,这里没做什么 SceneTestLayer::SceneTestLayer(){} *初始化函数,用来初始化界面组件 *下面的代码很容易理解,我就不一一注解了 boolSceneTestLayer::init() if(Layer::init()) autotextItem=MenuItemFont::create("ThisisNewSence"); autoitem=MenuItemFont::create("Back",CC_CALLBACK_1(SceneTestLayer::backToMainScene,226)"> automenu=Menu::create(textItem,item,NULL); menu->alignItemsVertically(); this->addChild(menu); returnfalse; *返回主界面的函数 voidSceneTestLayer::backToMainScene(Ref*sender){ scene->addChild(MainScene::create()); 7,GameScene.h
copy #ifndef__GameSceneLayer_H__ #define__GameSceneLayer_H__ classGameSceneLayer:publiccocos2d::Layer GameSceneLayer(); boolinit(); CREATE_FUNC(GameSceneLayer) 8,GameScene.cpp
copy GameSceneLayer::GameSceneLayer(){} boolGameSceneLayer::init() if(Layer::init()) autotestItem=MenuItemFont::create("ThisisGameScene"); automenu=Menu::create(testItem,0); background-color:inherit">//竖向排列,间距50 menu->alignItemsverticallyWithpadding(50); voIDGameSceneLayer::backToMainScene(Ref*sender){ scene->addChild(MainScene::create()); OK,代码就这些,我在官方的demo(testcpp里面找了4张图片这里就不解释了)直接放到resource文件夹下面就行了
运行效果如下,简单的说就是3个层的切换
主界面如下:
点击play图片,切换到NewScene:
点击back可返回
点击MainScene的aboat图片,可进入GameScene界面
OK,就是这么简单,当然,这才刚开始,因为到本人写这篇博客为止,我看cocos2dx的资料时间也就2天,这个东西也是模拟官方demo弄的,非常的坑,不过刚开始练手还是可以的。
FROM:http://blog.csdn.net/helem_2013/article/details/36647333
总结以上是内存溢出为你收集整理的零基础学cocos2dx 3.0(顺带学C++)第一篇 切换场景全部内容,希望文章能够帮你解决零基础学cocos2dx 3.0(顺带学C++)第一篇 切换场景所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)