美文网首页Cocos2dx
cocos2dx AppDelegate源码分析

cocos2dx AppDelegate源码分析

作者: 凉拌姨妈好吃 | 来源:发表于2018-05-15 12:12 被阅读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;
    }
    

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

    • 初始化导演类
    • 查看导演类的OpenGLView是否设置
    • 若无,设置窗口初始化、赋值给导演类的OpenGLView
    • 设置刷新频率、屏幕适配
    • 创建场景、运行
    屏幕适配的五种方式(下节再细讲)
    • EXACT_FIT:拉伸变形,铺满屏幕
    • NO_BORDER:按比例伸缩,全屏展示无黑边(大图裁剪、小图无黑边)
    • SHOW_ALL:按比例伸缩,全屏展示(大图铺满屏幕,小图留有黑边)
    • FIXED_WIDTH:按照 窗体(手机)分辨率宽度/设计分辨率宽度 的比例,缩放设计分辨率画面。这种设计分辨率,适合于竖版游戏。美术出底图资源时,要保证高度足够,否则会穿帮。
    • FIXED_HEIGHT :按照 窗体(手机)分辨率高度/设计分辨率高度 的比例,缩放设计分辨率画面。这种设计分辨率,适合于横版游戏。美术出底图资源时,要保证宽度足够,否则会穿帮。

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

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

    相关文章

      网友评论

        本文标题:cocos2dx AppDelegate源码分析

        本文链接:https://www.haomeiwen.com/subject/xecedftx.html