cocos2d-x 启动流程
环境: cocos 3.10 Xcode Lua
Application
在游戏启动中,程序会通过main进入到Application::run()中。对于Application而言,每个游戏都会对应一个Application对象。
它的职责是管理游戏生命周期,并设置默认窗口,获取平台及本地化信息等。
class CC_DLL Application : public ApplicationProtocol { public: // 设置FPS,默认每秒60帧 virtual void setAnimationInterval(float interval) override; // 运行游戏 int run(); // 获取语言类型,比如中文(CHINESE), 英文(ENGLISH)等 virtual LanguageType getCurrentLanguage() override; // 获取设备类型,比如Mac, android等 virtual Platform getTargetPlatform() override; // 获取cocos版本信息 virtual std::string getVersion() override; // 打开网址url virtual bool openURL(const std::string &url) override; };
我们看下Application::run主要代码相关:
int Application::run() { /* AppDelegate的回调,继承于Application。方便程序员更好的拓展或者自定义游戏生命周期相关,而添加 */ if(!applicationDidFinishLaunching()) { return 1; } long lastTime = 0L; long curTime = 0L; auto director = Director::getInstance(); auto glview = director->getOpenGLView(); // Retain glview to avoid glview being released in the while loop glview->retain(); // 游戏循环相关 while (!glview->windowShouldClose()) { lastTime = getCurrentMillSecond(); // mainLoop 用于绘制场景,事件处理及释放内存相关
// 比如:drawScene() 绘制渲染场景等
// 比如:PoolManager::getInstance()->getCurrent()->clear(); 检测内存释放相关 director->mainLoop (); glview->pollEvents(); curTime = getCurrentMillSecond(); // 检测是否等待下一帧而休眠 if (curTime - lastTime < _animationInterval) { usleep(static_cast<useconds_t>((_animationInterval - curTime + lastTime)*1000)); } } return 0; }
AppDelegate:
// 应用程序启动 bool AppDelegate::applicationDidFinishLaunching() { // 设置FPS,拓展:如果对游戏的刷新要求不太高的话,可降低帧数,这样可对游戏性能提高有积极作用,且可适当的降低设备温度 Director::getInstance()->setAnimationInterval(1.0 / 60.0f); // 初始化LuaEngine及Lua堆栈环境 auto engine = LuaEngine::getInstance(); ScriptEngineManager::getInstance()->setScriptEngine(engine); lua_State* L = engine->getLuaStack()->getLuaState(); lua_module_register(L); // 初始化Lua调用接口相关 register_all_packages(); // 设置加密相关 LuaStack* stack = engine->getLuaStack(); stack->setXXTEAKeyAndSign("2dxLua", strlen("2dxLua"), "XXTEA", strlen("XXTEA")); // 设置Lua资源路径及执行主文件相关 FileUtils::getInstance()->addSearchPath("src"); FileUtils::getInstance()->addSearchPath("res"); if (engine->executeScriptFile("main.lua")) { return false; } return true; } // 应用程序进入后台 void AppDelegate::applicationDidEnterBackground() { // 停止动画播放 Director::getInstance()->stopAnimation(); // 暂停音乐播放 SimpleAudioEngine::getInstance()->pauseBackgroundMusic(); } // 应用程序从后台返回到前台中 void AppDelegate::applicationWillEnterForeground() { // 开始动画播放 Director::getInstance()->startAnimation(); // 恢复音乐播放 SimpleAudioEngine::getInstance()->resumeBackgroundMusic(); }

浙公网安备 33010602011771号