cocos2dx 3.4 demo 接口分析
入口在main.lua 这里不多说
在main 函数里面能找到这么一段代码:
require("app.MyApp"):create():run()
```
这里解释一下(之前是用的cocos2dx 2.2.3 和lua ,也是第一次接触mvc的模式,这里就多啰嗦几句)
上面那段代码其实可以拆解为:
local app = require("app.MyApp"):create()--返回的是一个继承AppBase的类
app:run()
```
看的不爽的可以自己去修改 在MyApp的类中
请参考:http://www.cocos2dev.com/?p=535
这里调用了 该类里面的 create方法 这时候很多人就会问 『我没有在MyApp里面找到create方法啊』(看的当时我就郁闷了)
经过不懈的努力终于让我找到了问题的所在
我们看看在创建一个类的时候,框架帮我们做了什么直接上代码
目录在cocos-》cocos2d -》 functions.lua ps.这个再找不到我就救不了你了!
找到文件后来看里面的 class函数
在里面可以发现有这么一段代码
cls.create = function(_, ...)
return cls.new(...)
end
```
到这你应该就明白了把 ,这里自动加上了 create 函数 所以说create函数是有的(只是被蒙在鼓里了)
废话不多说 接着来看 create 函数里面 调用了 cls.new(...)
那么cls.new(...)里面又做了什么呢
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
function AppBase:run(initSceneName)
initSceneName = initSceneName or self.configs_.defaultSceneName
print("入口名:"..initSceneName)
--默认是进入MainScene场景 这里就不做深入讲解了,绕了一大圈 其实就为了创建一个场景
self:enterScene(initSceneName)
end
```
如果入口界面可以再AppBase:ctor()中进行修改MainScene
self.configs_ = {
viewsRoot = "app.views",
modelsRoot = "app.models",
defaultSceneName = "MainScene", --修改这里的名字
}
```
建议像我一样的新手多看看框架里面的代码,只要能够专研,定会有收获的!
第一次写这样的东西,又不对的地方还请各位大虾能够指点!我也将继续努力!!