cocos2d-x游戏开发系列教程-超级玛丽04-AppDelegate

代码下载链接

http://download.csdn.net/detail/yincheng01/6864893

解压密码:c.itcast.cn


背景

上一篇博文提到在CCApplication::run()函数中,调用虚函数applicationDidFinishLaunching,将初始化的控制权留给开发者。

如何实现,为什么要这么实现呢?


如何实现:虚函数重载

实现的方法就是开发者从CCApplication继承一个类,这个类在创建工程模板生成的工程里叫做AppDelegate

这个AppDelegate重载了applicationDidFinishLaunching,这样当调用CCApplication::run时,在run函数里调用的applicationDidFinishLaunching

是重载后的函数,也就是AppDelegate中重载的函数。


为什么要这么实现

这么实现是很优雅的,当然你可以通过函数指针去实现它,用C语言的方式,但是那种做法很原始。C++不建议动不动句函数指针的,破坏面向对象的结构。


为什么要提到applicationDidFinishLaunching

因为这个函数是真正的程序入口,而且这部分代码开始就是可移植部分了,上篇博文提到的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;
}

在这个函数运行完成之后,CMMenuScene场景就运行在窗口上了


原文地址:https://www.cnblogs.com/new0801/p/6177223.html