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();
}

 

posted @ 2020-03-22 23:33  Code~  阅读(708)  评论(0)    收藏  举报