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