cocos2d-x 3.6 程序流程

来源:互联网 发布:贵阳广电网络缴费标准 编辑:程序博客网 时间:2024/06/05 17:27
  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();    }}
0 0