Quick-cocos2d-x 组件

在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方法来控制你要导出的方法

你可能感兴趣的:(Quick-cocos2d-x 组件)