1.require("app.MyApp")
执行app文件下的MyApp.lua文件下的代码如下
local MyApp = class("MyApp", cc.mvc.AppBase) -- 继承cc.mvc.AppBase
return MyApp
这时候你就得到了MyApp这个类。
2.require("app.MyApp").new()其中的new函数
执行了new函数以后,MyApp执行的代码如下:
function MyApp:ctor()
MyApp.super.ctor(self)
end
为什么new()了之后会执行MyApp:ctor()?请看function.lua下的function class(classname, super)方法:
function cls.new(...)
local instance = cls.__create(...)
-- copy fields from class to native object
for k,v in pairs(cls) do instance[k] = v end
instance.class = cls
instance:ctor(...)
return instance
end
可以看到,在class的实现方法里面,给每个创建的类声明了一个new()方法,方法里面调用了ctor()构造方法(ctor只是个名字,所以不是有些人认为的new了之后,当然会调用构造方法,lua没有类,只是我们模仿了类)。
3.require(“app.MyApp”).new():run()
这时候调用了
function MyApp:run()
CCFileUtils:sharedFileUtils():addSearchPath("res/")
self:enterScene("MainScene")
end
所以进了MainScene.lua。
4.MainScene.lua里的enterScene(“MainScene”) 为什么可以切换场景?
我们看下MyApp的父类AppBase里面:
function AppBase:enterScene(sceneName, args, transitionType, time, more)
local scenePackageName = self. packageRoot .. ".scenes." .. sceneName
local sceneClass = require(scenePackageName)
local scene = sceneClass.new(unpack(totable(args)))
display.replaceScene(scene, transitionType, time, more)
end
这样你能理解了为什么连require文件都没有就能调用MainScene,当然你要留意下,它require时候的文件路径,scene默认写的app/scenes文件夹。
猴子原创,欢迎转载。转载请注明: 转载自Cocos2D开发网–Cocos2Dev.com,谢谢!
原文地址: http://www.cocos2dev.com/?p=535