游戏启动后,首先实例化的是AppDelegate这个类,这这个类里,咱们须要修改两个函数:applicationDidFinishLaunching和applicationDidEnterBackground。android
首先介绍applicationDidFinishLaunching(),游戏启动后,首先进入的就是这个方法,这里,咱们能够设置游戏的分辨率、帧率、第三方SDK的初始化,以及第一次要出现的场景。windows
bool AppDelegate::applicationDidFinishLaunching() { auto director = Director::getInstance(); auto glview = director->getOpenGLView(); if (!glview) { //定义在Windows下运行窗口的大小 glview = GLViewImpl::createWithRect("Raiden", Rect(0, 0, CONSTANT::DESIGN_RES_WIDTH * CONSTANT::RES_RATIO, CONSTANT::DESIGN_RES_HEIGHT * CONSTANT::RES_RATIO)); director->setOpenGLView(glview); } //横屏和竖屏选择不一样的缩放模式 auto frameSize = glview->getFrameSize(); if (frameSize.width >= frameSize.height) { director->getOpenGLView()->setDesignResolutionSize(CONSTANT::DESIGN_RES_WIDTH, CONSTANT::DESIGN_RES_HEIGHT, ResolutionPolicy::SHOW_ALL); } else { director->getOpenGLView()->setDesignResolutionSize(CONSTANT::DESIGN_RES_WIDTH, CONSTANT::DESIGN_RES_HEIGHT, ResolutionPolicy::EXACT_FIT); } //设置帧率为60帧/秒 director->setAnimationInterval(1.0f / 60); //设置搜索路径 FileUtils::getInstance()->addSearchPath("res"); //建立第一个要进入的场景 auto scene = LoadingLayer::scene(); //进入场景 director->runWithScene(scene); //初始化第三方SDK BmobSDKInit::initialize("app_id", "app_key"); return true; }
这里须要注意下面这几点:app
glview = GLViewImpl::createWithRect("Raiden", Rect(0, 0, CONSTANT::DESIGN_RES_WIDTH * CONSTANT::RES_RATIO, CONSTANT::DESIGN_RES_HEIGHT * CONSTANT::RES_RATIO));
这里是为在windows下运行的时候建立一个窗口。为了调试方便,咱们在开发游戏的时候会先在windows下编译调试,等到windows版本调试通了,再编译android版本。Rect(0, 0, CONSTANT::DESIGN_RES_WIDTH * CONSTANT::RES_RATIO, CONSTANT::DESIGN_RES_HEIGHT * CONSTANT::RES_RATIO)定义了窗口的大小,其中的几个宏的定义以下:ide
const float DESIGN_RES_WIDTH = 540; //宽度 const float DESIGN_RES_HEIGHT = 960; //高度 const float RES_RATIO = 0.75f;
因为本人的笔记本的高度小于960的,因此这里使用RES_RATIO来进行同比例缩小。若是这里不缩小窗口,则游戏窗口则会显示不全,并且更为严重的,是会出现鼠标点击定位不许的问题。函数
咱们使用了setDesignResolutionSize这个函数来设置缩放模式,其中,ResolutionPolicy的取值范围以下:spa
在本程序中,咱们根据屏幕的宽高获知当前是横屏仍是竖屏。若是是竖屏,则采用EXACT_FIT,以保证无黑边的全屏模式;若是是横屏,则采用SHOW_ALL,以防止游戏界面缩放变形。.net
当用户接了一个电话,或者按了home键使得游戏进入后台后,就会触发applicationDidEnterBackground()这个函数。设计
void AppDelegate::applicationDidEnterBackground() { Director::getInstance()->stopAnimation(); //判断当前是否在游戏中,若是是,则使游戏暂停 PlaneLayer* pPlaneLayer = dynamic_cast<PlaneLayer*>(GameLayer::getPlaneLayer()); HubLayer* pHubLayer = dynamic_cast<HubLayer*>(GameLayer::getHubLayer()); if (pHubLayer && pPlaneLayer && !pPlaneLayer->isPause()) { pHubLayer->menuPauseCallback(nullptr); } }
这里咱们只须要知道咱们作了暂停游戏的动做,即menuPauseCallback,这时游戏会弹出暂停场景。上面函数中的一些类和方法,咱们会在后面讲到。调试
转载请注明:http://www.javashuo.com/article/p-nrteqlbs-ch.htmlcode