http://download.csdn.net/detail/yincheng01/6864893
解压密码:c.itcast.cn
上一篇博文提到在CCApplication::run()函数中,调用虚函数applicationDidFinishLaunching,将初始化的控制权留给开发者。
如何实现,为什么要这么实现呢?
实现的方法就是开发者从CCApplication继承一个类,这个类在创建工程模板生成的工程里叫做AppDelegate
这个AppDelegate重载了applicationDidFinishLaunching,这样当调用CCApplication::run时,在run函数里调用的applicationDidFinishLaunching
是重载后的函数,也就是AppDelegate中重载的函数。
这么实现是很优雅的,当然你可以通过函数指针去实现它,用C语言的方式,但是那种做法很原始。C++不建议动不动句函数指针的,破坏面向对象的结构。
因为这个函数是真正的程序入口,而且这部分代码开始就是可移植部分了,上篇博文提到的main函数,是win32的main函数,各种平台语言的main函数
不尽相同,所以从代码结构看,main函数在win32平台目录,而AppDelegate在Classes目录下。
既然applicationDidFinishLaunching是真正的入口,那么这个函数负责着一些游戏逻辑代码,我们来看看这些代码的实现:
bool AppDelegate::applicationDidFinishLaunching() { // 获得导演对象,因为导演对象是单例,所以直接通过shareDirector获得 CCDirector* pDirector = CCDirector::sharedDirector(); // View对象,也是单例,直接获取 CCEGLView* pEGLView = CCEGLView::sharedOpenGLView(); // 设置舞台 pDirector->setOpenGLView(pEGLView); // 设置舞台的设计尺寸,整个程序都使用480*320规格的资源以及算法,但是当setFrameSize(960,640)时,cocos2dx自动会拉伸所有资源和算法 // 完成适配 pEGLView->setDesignResolutionSize(480, 320, kResolutionNoBorder); //pEGLView->setDesignResolutionSize(480, 320, kResolutionShowAll); // turn on display FPS pDirector->setDisplayStats(true); // set FPS. the default value is 1.0/60 if you don't call this pDirector->setAnimationInterval(1.0 / 60); // 创建菜单场景 CCScene *pScene = CMMenuScene::CreateMenuScene(); // 导演指挥运行场景 pDirector->runWithScene(pScene); return true; }