加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

cocos2d-x 3.6 程序流程

发布时间:2020-12-14 21:43:40 所属栏目:百科 来源:网络整理
导读:main.cpp #include "main.h" #include "AppDelegate.h" //应用委托 #include "cocos2d.h" //主要的头文件 USING_NS_CC; //名字空间 int APIENTRY _tWinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTR lpCmdLine,int nCmdShow){ UNREFERENCED_PARA
  1. main.cpp
#include "main.h"
#include "AppDelegate.h" //应用委托
#include "cocos2d.h" //主要的头文件

USING_NS_CC;//名字空间

int APIENTRY _tWinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTR    lpCmdLine,int       nCmdShow)
{
    UNREFERENCED_PARAMETER(hPrevInstance);//避免编译器关于未引用参数的警告
    UNREFERENCED_PARAMETER(lpCmdLine);

    // create the application instance
    AppDelegate app; //定义并初始化委托对象
    return Application::getInstance()->run();//应用单列运行
}
  1. run 方法:
int Application::run()
{
    PVRFrameEnableControlWindow(false);

    // Main message loop:
    LARGE_INTEGER nLast;
    LARGE_INTEGER nNow;

    QueryPerformanceCounter(&nLast);

    initGLContextAttrs();

    // Initialize instance and cocos2d.
    if (!applicationDidFinishLaunching())// 初始化,资源适配,屏幕适配,运行第一个场景等代码 
    {
        return 1;
    }

    auto director = Director::getInstance();//导演类对象获取
    auto glview = director->getOpenGLView();

    // Retain glview to avoid glview being released in the while loop
    glview->retain();

    while(!glview->windowShouldClose())
    {
        QueryPerformanceCounter(&nNow);
        if (nNow.QuadPart - nLast.QuadPart > _animationInterval.QuadPart)
        {//控制每一帧所运行的 最小 时间,从而控制游戏的帧率
            nLast.QuadPart = nNow.QuadPart - (nNow.QuadPart % _animationInterval.QuadPart);

            director->mainLoop();//主循环逻辑代码!!!
            glview->pollEvents();
        }
        else
        {
            Sleep(1);
        }
    }
    //程序退出(清理资源)
    // Director should still do a cleanup if the window was closed manually.
    if (glview->isOpenGLReady())
    {
        director->end();
        director->mainLoop();
        director = nullptr;
    }
    glview->release();
    return 0;
}
  1. applicationDidFinishLaunching 方法
bool AppDelegate::applicationDidFinishLaunching() {
    // initialize director
    auto director = Director::getInstance();
    auto glview = director->getOpenGLView();
    if(!glview) {
        glview = GLViewImpl::create("My Game");
        director->setOpenGLView(glview);
    }

    // turn on display FPS
    director->setDisplayStats(true);//显示FPS,设为false则关闭显示

    // set FPS. the default value is 1.0/60 if you don't call this
    director->setAnimationInterval(1.0 / 60);

    register_all_packages();

    // create a scene. it's an autorelease object
    auto scene = HelloWorld::createScene(); //场景创建

    // run
    director->runWithScene(scene);

    return true;
}
  1. mainLoop 方法
void DisplayLinkDirector::mainLoop()
{
    if (_purgeDirectorInNextLoop)
    {
        _purgeDirectorInNextLoop = false;
        purgeDirector();
    }
    else if (_restartDirectorInNextLoop)
    {
        _restartDirectorInNextLoop = false;
        restartDirector();
    }
    else if (! _invalid)
    {
        drawScene();// 屏幕绘制及一些相应的逻辑处理

        // release the objects
        PoolManager::getInstance()->getCurrentPool()->clear();
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读