您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 机械/模具设计 > cocos引擎《保卫萝卜》03:Hello Game
Cocos——《保卫萝卜》03:HelloGame项目解析一、前提:完成HelloGame项目的创建编译。具体参考:HelloGame项目创建二、本篇目标:分析proj.win32工程的主要构成分析proj.android工程的主要构成新建一个MyScene.cpp然后在游戏中显示出来在android真机上运行查看效果三、分析:我们游戏开发通常是这样的,首先在MicrosoftVisualStudio2012中proj.win32工程编写代码并且在windows上调试运行,当游戏主体开发完成后,进行so文件的编译打包,然后继续在eclipse的proj.android工程中编写少量的代码完成游戏在android平台下的打包开发。分析proj.win32工程的主要构成用MicrosoftVisualStudio2012打开proj.win32工程组成:整个hellogame的解决方案由hellogame、libbox2d、libcocos2d、libSpine四个工程项目构成。1、Hellogame工程:游戏主工程,我们开发工作主要在这个工程中完成2、libbox2d工程:模拟2D刚体物体的C++物理引擎,大名鼎鼎植物大战僵尸、愤怒的小鸟等游戏均有这个引擎的功劳3、libcocos2d工程:这个不用说了,整个Cocos2d-x核心4、libSpine工程:工具软件支持库接下来主要对Hellogame工程的代码进行解析,libbox2d工程在后面的物理引擎篇的时候在进行讲解,至于其它2个工程在后续使用到的篇幅中在进行讲解。Hellogame工程的源代码:工程主要由src目录下的AppDelegate.cpp、AppDelegate.h、HelloWorldScene.cpp、HelloWorldScene.h四个源文件和win32目录下的main.cpp、main.h两个源文件组成。src目录下的源文件是所有6个平台共用的代码文件,不管是Android还是iOS都使用这个目录下的源文件,属于真正跨平台部分的代码。Win32目录下的源文件只是一个main主入口文件,负责win32平台下对游戏的调用。其实在对应的proj.android的工程里也有一个Android平台对应的main主入口文件,只是由于平台的不同实现代码也各有不同,但是目的一样。AppDelegate.cpp源代码:AppDelegate类似于android的Application的作用,提供一些应用程序级别的状态的回调,整个游戏应用程序由这个文件方法进行控制。下面是几个主要方法的说明和解释:12345678910111213141516171819202122#includeAppDelegate.h#includeHelloWorldScene.h//命名空间宏,偷懒引入cocos2d的头文件USING_NS_CC;AppDelegate::AppDelegate(){}AppDelegate::~AppDelegate(){}//设置OpenGLcontext//这个设置对所有平台都有效voidAppDelegate::initGLContextAttrs(){//设置OpenGLcontext属性,目前只能设置6个属性//red,green,blue,alpha,depth,stencilGLContextAttrsglContextAttrs={8,8,8,8,24,8};GLView::setGLContextAttrs(glContextAttrs);}//当应用程序启动时执行,游戏程序启动入口//在这里我们启动了第一个scene(场景)//在具体游戏中通常在这里启动loading界面//你的游戏从这里开始!23242526272829303132333435363738394041424344boolAppDelegate::applicationDidFinishLaunching(){//初始化directorautodirector=Director::getInstance();autoglview=director-getOpenGLView();if(!glview){glview=GLViewImpl::create(MyGame);director-setOpenGLView(glview);}//在屏幕上显示FPS数//开发阶段建议开启这个设置,可以通过这个对自己游戏性能有个大体了解//等游戏正式发布时关闭这个设置director-setDisplayStats(true);//设置FPS数默认值为1.0/60director-setAnimationInterval(1.0/60);//创建一个HelloWorld的scene.这个是自动回收的对象autoscene=HelloWorld::createScene();//告诉director运行HelloWorld的scenedirector-runWithScene(scene);returntrue;}//当游戏进入后台时会调用这个方法//比如玩游戏时按下android手机的home按键454647484950515253545556575859//比如当游戏时有电话打入直接显示来电界面voidAppDelegate::applicationDidEnterBackground(){Director::getInstance()-stopAnimation();//如果你的游戏使用了SimpleAudioEngine,必须在这里进行暂停//暂停代码如下://SimpleAudioEngine::getInstance()-pauseBackgroundMusic();}//当游戏恢复到前台运行时会调用这个方法//比如接电话结束是游戏界面又恢复到前台时voidAppDelegate::applicationWillEnterForeground(){Director::getInstance()-startAnimation();//如果你的游戏使用了SimpleAudioEngine,必须在这里进行恢复//恢复代码如下://SimpleAudioEngine::getInstance()-resumeBackgroundMusic();}上述代码解释中的提到的director(导演:负责游戏场景的显示切换等,像电影导演一样掌控整个电影的一切)、scene(场景:负责显示一个游戏场景,就像电影的一个场景镜头)。上面代码中最重要的方法为applicationDidFinishLaunching(),因为你的游戏从这个方法开始!HelloWorldScene.cpp源代码:上面代码中在AppDelegate类的applicationDidFinishLaunching()方法中创建了一个HelloWorldScene的场景,并且运行这个场景,HelloWorldScene.cpp就是这个场景具体的代码实现。下面是几个主要方法的说明和解释:1234567891011121314#includeHelloWorldScene.hUSING_NS_CC;//创建场景Scene*HelloWorld::createScene(){//创建一个自释放的场景对象autoscene=Scene::create();//创建一个自释放的画面层对象autolayer=HelloWorld::create();//把创建的画面层添加到场景中//一个场景可以添加多个画面层scene-addChild(layer);//返回这个创建的场景returnscene;}//场景初始化方法boolHelloWorld::init(){//1.首先进行父类初始化1516171819202122232425if(!Layer::init()){//如果初始化父类失败返回falsereturnfalse;}//获取整个手机可视屏幕尺寸SizevisibleSize=Director::getInstance()-getVisibleSize();//获取手机可视屏原点的坐标Vec2origin=Director::getInstance()-getVisibleOrigin();//创建一个带图标的关闭按钮//点击后调用menuCloseCallback方法退出游戏autocloseItem=MenuItemImage::create(CloseNormal.png,CloseSelected.png,CC_CALLBACK_1(HelloWorld::menuCloseCallback,this));//设置关闭按钮的显示位置//显示在可视屏幕的右下角closeItem-setPosition(Vec2(origin.x+visibleSize.width-closeItem-getContentSize().width/2,origin.y+closeItem-getContentSize().height/2));2627282930313233343536//创建一个可自释放的菜单automenu=Menu::create(closeItem,NULL);menu-setPosition(Vec2::ZERO);this-addChild(menu,1);//创建一个显示HelloGame文字的Labelautolabel=Label::createWithTTF(HelloGame,fonts/MarkerFelt.ttf,24);//设置label在屏幕中的显示位置label-setPosition(Vec2(origin.x+visibleSize.width/2,origin.y+visibleSize.height-label-getContentSize().height));//把label添加到画面层this-addChild(label,1);//创建一个带图片的精灵autosprite=Sprite::create(HelloWorld.png);//设置图片精灵的显示位置sprite-setPosition(Vec2(visibleSize.width/2+origin.x,visibleSize.height/2+origin.y));//添加图片精灵到画面层this-addChild(sprite,0);returntrue;}//退出按钮事件voidHelloWorld::menuCloseCallback(Ref*pSender)3738394041424344454647{//当是wp8或者winrt平台的时候#if(CC_TARGET_PLATFORM==CC_PLATFORM_WP8)||(CC_TARGET_PLATFORM==CC_PLATFORM_WINRT)MessageBox(Youpressedtheclosebutton.WindowsStoreAppsdonotimplementaclosebutton.,Alert);return;#endif//结束DirectorDirector::getInstance()-end();//当是ios平台的时候退出#if(CC_TARGET_PLATFORM==CC_PLATFORM_IOS)exit(0);#endif}4849505152535455565758596061626364656667686970717273上述的代码是一个简单的Scene(场景)实现代码,当我们真正开发游戏时,其实就是制作一个一个的场景,并且通过Director进行调度组织构成一个完整的游戏。分析proj.android工程的主要构成用eclipse打开proj.android工程组成:整个hellogame的相比win32的要简单多了,除了android项
本文标题:cocos引擎《保卫萝卜》03:Hello Game
链接地址:https://www.777doc.com/doc-6402912 .html