最近在学习Cocos2d-x 3.4,算是个不折不扣的新手菜鸟。拿一点心得和初学同好交流下。
关于Cocos2d-x 3.4 demo接口分析。入口在main.lua这里不多说。
在mai 函数里面能找到这么一段代码:
1
|
require("app.MyApp"):create():run()
|
这里解释一下(之前是用的Cocos2d-x 2.2.3和lua ,也是第一次接触mvc的模式,这里就多啰嗦几句)
上面那段代码其实可以拆解为:
1
2
|
local app = require("app.MyApp"):create()--返回的是一个继承AppBase的类
app:run()
|
这里调用了该类里面的 create方法 这时候很多人就会问 『我没有在MyApp里面找到create方法啊』(看的当时我就郁闷了)。
经过不懈的努力终于让我找到了问题的所在。我们看看在创建一个类的时候,框架帮我们做了什么直接上代码,目录在cocos-》cocos2d -》 functions.lua ps.这个再找不到我就救不了你了!
找到文件后来看里面的class函数,在里面可以发现有这么一段代码
1
2
3
|
cls.create = function(_, ...)
return cls.new(...)
end
|
到这你应该就明白了把,这里自动加上了create函数所以说create函数是有的(只是被蒙在鼓里了)。
废话不多说,接着来看create函数里面调用了cls.new(...)
那么cls.new(...)里面又做了什么呢
1
2
3
4
5
6
7
8
9
10
11
12
13
|
cls.new = function(...)
local instance
if cls.__create then
instance = cls.__create(...)
else
instance = {}
end
setmetatableindex(instance, cls)
instance.class = cls
--这里调用了ctor函数了 每次创建一个类都会自动调用ctor函数,一般在这里做一些初始化的事情,和夹在资源什么的(看了很多帖子,说不推荐在这里加载资源)
instance:ctor(...)
return instance
end
|
这也就解决了ctor自动调用的问题了,只要在新增的类中写该类的ctor()函数,在加载类的时候就能自动运行该函数。
回到最初的问题,以上create()这一步算是讲完了,再看看run()里面做了什么事情。
进入到AppBase类中 目录在 packages ->mvc -> AppBase.lua
实际上这里做的就是创建最开始的场景 demo里是MainScene
1
2
3
4
5
6
|
function AppBase:run(initSceneName)
initSceneName = initSceneName or self.configs_.defaultSceneName
print("入口名:"..initSceneName)
--默认是进入MainScene场景 这里就不做深入讲解了,绕了一大圈 其实就为了创建一个场景
self:enterScene(initSceneName)
end
|
如果入口界面可以再AppBase:ctor()中进行修改MainScene
1
2
3
4
5
|
self.configs_ = {
viewsRoot = "app.views",
modelsRoot = "app.models",
defaultSceneName = "MainScene", --修改这里的名字
}
|
建议像我一样的新手多看看框架里面的代码,只要能够专研,定会有收获的!