Cocos2dx引擎1-运行流程-基于Win32

Win32Cocosdx程序首先由mian.c文件开始执行

int APIENTRY _tWinMain(….) //win32应用程序中main函数
{
    ……
   AppDelegate app;
   return Application::getInstance()->run();
}

AppDelegate app;会执行AppDelegate类的构造函数,而AppDelegate集成于Application类,即首先AppDelegate类的构造函数

Application::Application()
{
   …..
   sm_pSharedApplication = this;
}

sm_pSharedApplication = this;是将sm_pSharedApplication指向AppDelegate实例,以便使用Application::getInstance()获取AppDelegate实例;

 

return Application::getInstance()->run();将会调用AppDelegate类中的run()方法,该方法继承自Application类,该方法中初始化游戏后,会进入无限循环(游戏退出除外)进行渲染游戏画面,如下所示:

int Application::run()
{
    …..
/*调用AppDelegate类中的applicationDidFinishLaunching()方法,此函数为初始化游戏的地方*/
   if (!applicationDidFinishLaunching()){
        return 0;
   }
   auto director = Director::getInstance();
   auto glview = director->getOpenGLView();
   glview->retain();
 
   while(!glview->windowShouldClose())
   {
        QueryPerformanceCounter(&nNow);//获取系统时间片段
        /*判断帧率,使游戏帧率不大于设定帧率*/
        if (nNow.QuadPart - nLast.QuadPart >_animationInterval.QuadPart)
        {
            nLast.QuadPart = nNow.QuadPart;
            director->mainLoop(); //渲染游戏画面的开始
            glview->pollEvents();
        }
        else
        {
            Sleep(0);
        }
   }
 
   if (glview->isOpenGLReady())
   {
        director->end();
        director->mainLoop();
        director = nullptr;
   }
   glview->release();
   return true;
}


AppDelegate类中的applicationDidFinishLaunching()方法,游戏设计入口在此处,如下:

boolAppDelegate::applicationDidFinishLaunching() {
   
// Director类使用的单例模式,此处为第一次调用,会创建并初始化Director
   auto director = Director::getInstance();
   auto glview = director->getOpenGLView();
   if(!glview) {
        glview = GLView::create("MyGame");//创建GLView &初始化OpenGL
        director->setOpenGLView(glview);
   }
 
   // turn on display FPS
   director->setDisplayStats(true); //开启游戏界面显示FPS功能
 
   // set FPS. the default value is 1.0/60 if you don't call this
   director->setAnimationInterval(1.0 / 60); //设置帧率
 
   // create a scene. it's an autorelease object
   auto scene = HelloWorld::createScene(); //创建第一个Scene
 
   // run
   director->runWithScene(scene); //第一个运行的Scene
 
   return true;
}



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值