#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();//应用单列运行
}
run 方法:
int Application::run()
{
PVRFrameEnableControlWindow(false);
// Main message loop:
LARGE_INTEGER nLast;
LARGE_INTEGER nNow;
QueryPerformanceCounter(&nLast);
initGLContextAttrs();
// Initialize instance and cocos2d.if (!applicationDidFinishLaunching())// 初始化,资源适配,屏幕适配,运行第一个场景等代码
{
return1;
}
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();
return0;
}
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);
returntrue;
}