在quick的一些demo中,我看到了很多类似于这样的用法
cc(self):addComponent("components.behavior.EventProtocol"):exportMethods()
这一串牵扯到的东西之多,让我一开始就傻眼了,但是一步步看下去后,也没有想象中的复杂
首先看 cc(self) 很奇怪的写法
在framework/cc 目录下,init.lua中有这样一段
-- cc = cc.GameObject.extend()
local GameObject = cc.GameObject
local ccmt = {}
ccmt.__call = function(self, target)
if target then
return GameObject.extend(target)
end
printError("cc() - invalid target")
end
setmetatable(cc, ccmt)
cc(self)本质上调用了ccmt的__call方法,其实就是调用GameObject.extend(self)
GameObject.extend方法就是给self进行拓展,使其具有components_属性,用来保存其所有的组件。并添加了一些
addComponent removeComponent等方法。
而exportMethods则是在Component.lua中的方法。它的作用也很简单。比如你给对象添加了一个状态机组件,状态机组件中有一些方法比如doEvent(),当你调用了exportMethods后,就不需要再去获得状态机组件来调用doEvent方法,而是可以直接你拓展的对象本身去调用。
quick框架本身提供了一些组件,当然我们也可以自定义组件,只要继承自Component就可以了。
我们也可以通过重写exportMethods方法来控制你要导出的方法