代码下载链接

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场景就运行在窗口上了

cocos2d-x游戏开发系列教程-超级玛丽04-AppDelegate的更多相关文章

  1. cocos2d-x游戏开发系列教程-超级玛丽10-怪物与马里奥冲突检测

    在超级玛丽游戏中,马里奥在移动,怪物也在移动,当他们遇见时,需要判断是马里奥身亡还是怪物身亡. 这个判断的代码在怪物类的检测函数实现中. 比如蘑菇怪的冲突检测函数: bool CMMonsterMus ...

  2. cocos2d-x游戏开发系列教程-超级玛丽07-CMGameMap

    背景 在上一篇博客中,我们提到CMGameScene,但是CMGameScene只是个框架,实际担任游戏逻辑的是CMGameMap类,这个博文就来了解下CMGameMap 头文件 class CMGa ...

  3. cocos2d-x游戏开发系列教程-超级玛丽06-CMGameScene

    背景 在CMMenuScene中,当用户点击开始游戏时,导演让场景进入到CMGameScene 头文件 class CMGameScene : public cocos2d::CCLayer,publ ...

  4. cocos2d-x游戏开发系列教程-超级玛丽08-消息机制

    在超级玛丽游戏里,地图类CMGameMap负责所有的程序逻辑,它包含了背景地图,包含了游戏元素精灵,当游戏中的精灵之间发生碰撞时,比如马里奥撞上砖头这种事情发生时,马里奥对象本身不知道怎么处理这个逻辑 ...

  5. cocos2d-x游戏开发系列教程-超级玛丽05-CMMenuScene

    代码下载链接 http://download.csdn.net/detail/yincheng01/6864893 解压密码:c.itcast.cn 背景 上一篇博文提到appDelegate,在该类 ...

  6. cocos2d-x游戏开发系列教程-超级玛丽09-怪物激活与移动

    在游戏中,很多怪物本身是会移动的,这里主要有蘑菇怪,乌龟等. 说起怪物的移动,首先在游戏里先要考虑怪物的抽象和设计. 在CMMonster.h中,有个类CMMonsterBasic,这个类抽象了所有的 ...

  7. cocos2d-x游戏开发系列教程-超级玛丽07-CMGameMap(五)-地图卷动

    马里奥在平移的过程中,涉及到地图的卷动问题. 在这个游戏里,地图比窗口大,窗口只是显示了地图的一部分,因此马里奥在移动的时候,移动到一定位置之后要卷动地图,否则马里奥移动到窗口右边之后......那结 ...

  8. cocos2d-x游戏开发系列教程-超级玛丽07-CMGameMap(三)-按键处理

    在地图初始化好了之后,就开始移动马里奥吧,我在windows下,是使用键盘来移动马里奥的 w是跳,d是前进,a是后退,那么在程序里是怎么来获取这个按键的呢? 普通的windows程序,在按键之后,会有 ...

  9. cocos2d-x游戏开发系列教程-超级玛丽02-代码结构

    代码下载链接 http://download.csdn.net/detail/yincheng01/6864893 解压密码:c.itcast.cn 前景回顾 上一篇博文提到超级马里奥的游戏效果,大家 ...

随机推荐

  1. 基于mini2440的看门狗(裸机)

    在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工作,会造成整个系统的陷入停滞状态,发生 ...

  2. linux系统的安装

    安装linux系统须要选择一个linux操作系统,有redhat,ubuntu,centos,这里选择centos进行linux系统的安装 首先在centos的官方站点下载镜像文件CentOS-6.5 ...

  3. git将本地项目添加到github远程仓库

    1.首先准备好你的github 账号密码,注册就不说了.. 2.由于本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以要在本地生成一个私钥和一个密钥 命令: $ ssh-keygen ...

  4. 自定义通用Distinct去除重复数据的2中方式

    由于Lambda Distinct方法默认是按照集合里面的值比较的,所以当集合里面存放的是类的时候,我们一般是按照实体中的某一属性值比较,其实是用默认的Distinct也可以的,自己先定义一个实现了接 ...

  5. Windows上右键git菜单出来的原因

    Windows上右键git菜单出来的原因 Git下载地址https://code.google.com/p/msysgit/downloads/list?q=full+installer+offici ...

  6. ANTLR3

    ANother Tool for Language Recognition start...

  7. python列表类型中的陷阱

    在python中对列表使用重复运算符*进行操作时,只是简单的进行了浅复制,内部的结构并没有复制过来,所以下面的例子结果是这样的: >>> lists =[[]]*3 >> ...

  8. ORACLE备份手记

    嘛的,最近一直写EPOLL的游戏服务端搞的头晕,BOSS说了要备份ORACLE,由于DBA离职了,搞这个事情搞的很蛋疼,关掉实例后备份数据库各种连接不到实例,本来今晚要完成泡泡堂游戏的DX版的,郁闷 ...

  9. 嵌入式C开发人员的最好的0x10道笔试题

    嵌入式C开发人员的最好的0x10道笔试题 2006-11-22 15:53 约定: 1) 下面的测试题中,认为所有必须的头文件都已经正确的包含了 2)数据类型 char 一个字节 1 byte int ...

  10. MVC-05 Model(1)

    在开发应用程序的过程中,经常需要处理许多大大小小的数据,例如,SQL Server数据库存取.连接AD(Active Directory)数据库进行验证.调用外部Web Service取得数据等.除了 ...