Cocos2dx

cocos2dx AppDelegate源码分析

2018-05-15  本文已影响0人  凉拌姨妈好吃

作为游戏的主程入口,AppDelegate十分重要,它用于游戏程序的逻辑初始化,创建运行程序的入口界面
先来看看AppDelegate.h定义了什么样的成员函数

//导演和场景的初始化
 bool applicationDidFinishLaunching()
{
    //初始化一个导演类
    auto director = Director::getInstance();
    
  //这里拿变量来存储导演类的GLView,如果没有GLView就设置GLView属性
    auto glview = director->getOpenGLView();
    if(!glview) {
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32) || (CC_TARGET_PLATFORM == CC_PLATFORM_MAC) || (CC_TARGET_PLATFORM == CC_PLATFORM_LINUX)
        
        //牵扯到一些小数据的问题,可以使用UserDefault来存储,存储为xml格式文件 
        std::string count = cocos2d::UserDefault::getInstance()->getStringForKey("account");
       
       //初始化程序窗口标题
        glview = GLViewImpl::createWithRect(utility::a_u8("游戏名称") + count, cocos2d::Rect(0, 0, 860,480));
#else
        glview = GLViewImpl::create(utility::a_u8("游戏名称"));
#endif

        //OpenGLView里包含了很多配置信息,包括设置的屏幕分辨率的配置信息
        director->setOpenGLView(glview);
    }

    //不开启状态显示
    director->setDisplayStats(false);

    //刷新频率,每秒60帧
    director->setAnimationInterval(1.0f / 60);
    
    //屏幕适配,在这里设置游戏的分辨率,有五种适配方式,下面说
    glview->setDesignResolutionSize(designResolutionSize.width, designResolutionSize.height, ResolutionPolicy::EXACT_FIT);

    //使用包管理者去安装更多的包
    register_all_packages();

    reLoad();

    //创建一个场景
    auto scene = GQFlashScene::createScene();
    //运行该场景
    director->runWithScene(scene);

    return true;
}

总结一下上面的初始化函数:

屏幕适配的五种方式(下节再细讲)

// 切换到后台
//下面这个成员函数是在应用闲置时调用,比如:用户接电话时

void AppDelegate::applicationDidEnterBackground() {
    //暂停游戏
    Director::getInstance()->stopAnimation();

    if (GameManagerBase::pInstanceBase())
    {
              //这是一个空函数。。。写了估计是为了和下面的Enter进行对照
              GameManagerBase::InstanceBase().applicationDidEnterBackground();
    }
}

// 切换到前台

void AppDelegate::applicationWillEnterForeground() {
    Director::getInstance()->startAnimation();

    if (GameManagerBase::pInstanceBase())
    {
        //当接完电话,重新进入该应用,会调用下面的函数,进行断线重连
        GameManagerBase::InstanceBase().applicationWillEnterForeground();
    }

    bool isExitPage = UserDefault::getInstance()->getBoolForKey("exit_upgrade_scene", true);
    if (!isExitPage) __NotificationCenter::getInstance()->postNotification("UPGRADE_NOTI");
}
上一篇 下一篇

猜你喜欢

热点阅读