重开发人员的劳动成果。转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27706303

生命周期分析
在前面文章中我们执行了第一个 Cocos2d-x 游戏,同一时候也介绍了控制游戏生命周期的 AppDelegate 文件。

以下我们将结合一些游戏调试经常使用的技巧以及VS工具调试的方法来分析 Cocos2d-x 程序的生命周期。 

VS工具调试
1、查看内存窗体
2、查看输出窗体
3、假设程序崩溃查看调用堆栈窗体


打开项目中的"AppDelegate.cpp"文件。

为了清楚地理解函数间的调用关系。最好还是给每一个函数的开头加上一个日志函数调用,
在控制台打印该函数被调用的信息。

因此,我们建立以下的一个日志类,利用暂时变量在栈中的生命周期。搭配自己主动构造和析构函数产生的日志。
并定义一个宏来跟踪函数名称,使用它们来打印函数的開始和结束。 

建立一个
LifeCircleLog 类。并加入例如以下代码:
class LifeCircleLog
{
std::string m_msg;
public:
LifeCircleLog (){};
LifeCircleLog (const string& msg):m_msg(msg)
{
CCLog("%s BEGINS!",m_msg.c_str());
}
~ LifeCircleLog ()
{
CCLog("%s ENDS!",m_msg.c_str());
}
};

//CCLog:Cocos2d-x 提供的日志输出函数。

这里出现的 CCLog 是 Cocos2d-x 的控制台输出函数,其參数方式与 C 语言的 printf 全然一致。
用%d 表示整型,%s 表示字符串等。

实际上,在 Windows 平台上。该函数正是通过包装 printf 函数实现的。

在 iOS 和 Android 等平台上,这个函数有着相同的接口表示。并都能够在调试时信息打印到控制台。

我们在 AppDelegate 类中全部函数的第一条语句前增加 LOG_FUNCTION_LIFE 宏:
AppDelegate::AppDelegate() {
LOG_FUNCTION_LIFE
} AppDelegate::~AppDelegate()
{
LOG_FUNCTION_LIFE
} bool AppDelegate::applicationDidFinishLaunching() {
LOG_FUNCTION_LIFE // initialize director
auto director = Director::getInstance();
auto glview = director->getOpenGLView();
if(!glview) {
glview = GLView::create(FontChina::G2U("郝萌主之找小三"));
director->setOpenGLView(glview);
} // turn on display FPS
director->setDisplayStats(false); // 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(); // run
director->runWithScene(scene); return true;
} // This function will be called when the app is inactive. When comes a phone call,it's be invoked too
void AppDelegate::applicationDidEnterBackground() {
LOG_FUNCTION_LIFE Director::getInstance()->stopAnimation(); // if you use SimpleAudioEngine, it must be pause
SimpleAudioEngine::getInstance()->pauseBackgroundMusic();
} // this function will be called when the app is active again
void AppDelegate::applicationWillEnterForeground() {
LOG_FUNCTION_LIFE Director::getInstance()->startAnimation(); // if you use SimpleAudioEngine, it must resume here
SimpleAudioEngine::getInstance()->resumeBackgroundMusic();
}
启动游戏。然后做例如以下操作:
首先把游戏最小化,然后再把它恢复到前台,最后关闭游戏。

完毕后回到 VS,能够在控制台中的输出窗体里看到函数调用顺序:

AppDelegate::AppDelegate BEGINS!
AppDelegate::AppDelegate ENDS!
AppDelegate::applicationDidFinishLaunching BEGINS!
AppDelegate::applicationDidFinishLaunching ENDS!

AppDelegate::~AppDelegate BEGINS!
AppDelegate::~AppDelegate ENDS!

由这个实验能够看出。AppDelegate 是整个程序的入口。


实际上,AppDelegate 处理了程序生命周期中的 4 个重要事件点:
程序完毕初始化,程序进入后台,程序重回前台和程序结束退出。

进入后台和重回前台两个函数完毕暂停和恢复游戏的处理。

appDidFinishingLaunching 则完毕了载入游戏场景等工作。


郝萌主友情提醒:
处理好用户的各种操作。才不会导致程序崩溃哦、、、、

12、Cocos2dx 3.0游戏开发找小三之3.0中的生命周期分析的更多相关文章

  1. 13、Cocos2dx 3.0游戏开发找小三之3.0中的Director :郝萌主,一统江湖

    重开发人员的劳动成果.转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27706967 游戏中的基本元素 在曾经文章中.我们具 ...

  2. 7、Cocos2dx 3.0游戏开发找小三之3.0版本号的代码风格

    重开发人员的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27691337 Cocos2d-x代码风格 前面我们已 ...

  3. 6、Cocos2dx 3.0游戏开发找小三之游戏的基本概念

    重开发人员的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27689713 郝萌主友情提示: 人是习惯的产物,当你 ...

  4. 1、Cocos2dx 3.0游戏开发找小三之前言篇

    尊重开发人员的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27094663 前言 Cocos2d-x 是一个通用 ...

  5. 3、Cocos2dx 3.0游戏开发找小三之搭建开发环境

    尊重开发人员的劳动成果.转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27107295 搭建开发环境 使用 Cocos2d- ...

  6. 19、Cocos2dx 3.0游戏开发找小三之Action:流动的水没有形状,漂流的风找不到踪迹、、、

    重开发人员的劳动成果.转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/30478985 流动的水没有形状.漂流的风找不到踪迹. ...

  7. 18、Cocos2dx 3.0游戏开发找小三之cocos2d-x,请问你是怎么调度的咩

    重开发人员的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/30478251 Cocos2d 的一大特色就是提供了事 ...

  8. 4、Cocos2dx 3.0游戏开发找小三之Hello World 分析

    尊重开发人员的劳动成果.转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27186557 Hello World 分析 打开新 ...

  9. 22、Cocos2dx 3.0游戏开发找小三之音乐与音效:假如世界上没有了音乐,你的耳朵会孤单吗?

    重开发人员的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/30485103 假如世界上没有了音乐,在森林里.我们听 ...

随机推荐

  1. cron - 定期执行指定命令的守护程序 (Vixie Cron)

    总览 cron 描述 Cron 应该由 /etc/rc 或者 /etc/rc.local 启动(译注:有很多发行版与此不同的,如 RedHat6.x 使用 /etc/rc.d/init.d/crond ...

  2. splice用法解析

    splice()方法算是最强大的数组方法了,它有很多种用法,主要用于删除指定位置的数组项,在指定的位置插入数组项,在指定位置替换数组项,slpice()方法始终都会返回一个数组,该数组包括从原始数组中 ...

  3. 10 Steps To be a senior programmer

    What 软件工程师的职业生涯要历经以下几个阶段:初级.中级,最后才是高级.这篇文章主要是讲如何通过 10 个步骤助你成为一名高级软件工程师. Why 得到更多的报酬!因为你的薪水会随着你水平的提高而 ...

  4. SQL Server中 sysobjects、sysolumns、systypes

    1.sysobjects    系统对象表. 保存当前数据库的对象,如约束.默认值.日志.规则.存储过程等 在大多数情况下,对你最有用的两个列是Sysobjects.name和Sysobjects.x ...

  5. div 可视化区域弹窗居中

    效果: css: .div_alt { position: fixed; border-radius: 5px; top: 50%; left: 50%; width: auto; min-width ...

  6. VIM命令大全(图+文)

    在命令状态下对当前行用== (连按=两次), 或对多行用n==(n是自然数)表示自动缩进从当前行起的下面n行.你可以试试把代码缩进任意打乱再用n==排版,相当于一般IDE里的code format.使 ...

  7. Linux中CentOS网络配置以及与Xshell建立远程连接

    为centos配置网络 (1)第一步 点开虚拟机的设置,如下图做相关的设置: 网络连接要选择桥接模式,其他的勾选就按照上图的即可,勾选完成点击确定. (2)第二步 点击VMware的编辑选项,找到“虚 ...

  8. uva 10596 - Morning Walk

    Problem H Morning Walk Time Limit 3 Seconds Kamal is a Motashota guy. He has got a new job in Chitta ...

  9. LINUX:Contos7.0 / 7.2 LAMP+R 下载安装Redis篇

    文章来源:http://www.cnblogs.com/hello-tl/p/7569108.html 更新时间:2017-09-21 16:09 简介 LAMP+R指Linux+Apache+Mys ...

  10. Python之面向对象反射

    Python之面向对象反射 isinstance(obj,cls)检查是否obj是否是类 cls 的对象 1 class Foo(object): 2 pass 3 4 obj = Foo() 5 6 ...