Cocos2d-x的学习 程序是如何进入到自己的代码的 Application有趣的地方

admin 2018-3-28 203

版本:cocos2d-x 3.10 语言:C++

 

今天有点忙啊,有点忙,昨天的研究暂时缓一下。早上的时候看了一会红孩儿的博客,深感自己的水平十分的不足。

 

其中一段Application的东西让我摸不着头脑,反复的研究后终于懂了,那时候的版本是1.0吧,现在应该已经是3.0时代了,回去看了看3.10的源代码,发现原理还是一样的。现在我就给大家分享一下。

 

稍微研究过cocos2d-x的玩家应该都知道,cocos的跨平台是通过不同平台的程序代码进入到统一的AppDelegate类中,然后AppDelegate在applicationDidFinishLaunching方法中会调用第一个场景。

 

比如win32程序就是通过main.cpp进入的,代码如下:

 

很简单的代码,不过我是没看懂那个函数传的一堆参数,不过没关系,看看自己能看的。

 

首先从包含的头文件来看,AppDelegate.h在cocos的想法中是不属于cocos2d中的。然后关注一下最重要的两行:

AppDelegate app;

return Application::getInstance()->run()

 

普通的来说,不应该是app.run()吗?(app创建的时候不是指针创建的,说明函数完了就会被销毁,也就是说当程序跳出run函数的时候程序就结束了)

 

我们来看一下getInstance,他的运行实例究竟是从哪里来的:

 

可以看到这边返回的是保存在内部的一个静态成员。然后在来看一下这边的构造函数:

 

重点关注的是sm_pSharedApplication = this,还有得知道AppDelegate是继承于Application的。这意味着什么的?

 

也就是说AppDelegate app;这一句创建的时候会运行构造函数,会把自身传递给sm_pSharedApplication,然后使用静态函数获取到该实例run一下就进入到这里:

 

运行了AppDelegate实现的applicationDidFinishLaunching方法,然后就进入了自己的代码了。

 

可能是我见识少了,这种方式的创建从来没见过,平时都是getInstance中直接创建静态实例,如果创建了就返回。看来真的得多看一些底层的代码,了解他们是如何去设计自己的类,毕竟这一些引擎的代码写得比较的专业。还得多多学习啊。


最新回复 (0)
返回