持续更新入坑的姿势


framework/cc/init.lua中,发现这段新的代码。设置了cc大坑的__call元方法。调用cc(XXX)时候相当于调用了GameObject.extend(XXX)。使XXX有获得超能力的基础(获得GameObject.lua中定义的接口)。

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)

在framework中搜索会发现如下结果(所有用cc(XXX)写法的地方)

cc/EventProxy.lua     |9   col  9|   cc(view):addNodeEventListener(cc.NODE_EVENT,function(event)
cc/init.lua           |61  col  17|  printError("cc() - invalid  target")
cc/mvc/AppBase.lua    |8   col  5|   cc(self):addComponent("components.behavior.EventProtocol"):exportMethods()
cc/mvc/ModelBase.lua  |15  col  5|   cc(self):addComponent("components.behavior.EventProtocol"):exportMethods()
cc/net/SocketTCP.lua  |38  col  2|   cc(self):addComponent("components.behavior.EventProtocol"):exportMethods()
cc/ui/init.lua        |42  col  5|   cc(control)
cc/ui/UIButton.lua    |60  col  5|   cc(self.fsm_)
cc/ui/UILayout.lua    |51  col  5|   cc(self):addComponent("components.ui.LayoutProtocol"):exportMethods()
cc/ui/UISlider.lua    |86  col  5|   cc(self.fsm_)
cc/ui/UIStretch.lua   |46  col  5|   cc(self):addComponent("components.ui.LayoutProtocol"):exportMethods()
cc/utils/Timer.lua    |22  col  5|   cc(timer):addComponent("components.behavior.EventProtocol"):exportMethods()

从2.x系列转到3.x,cc大坑中有一个新的小坑,cc.bPlugin_ 。 cc.bPlugin_在framework的init.lua中初始化

if cc.Node.removeTouchEvent then
    cc.bPlugin_ = true
end

在framework中搜索cc.bPlugin_大概看了下,基本用来都是控制是否使用cocosui。今儿被这个display.newLayer坑了,默认把layer当作Node了且开启了Touch。 代码如下

function display.newLayer()
    local layer

    if cc.bPlugin_ then
        layer = display.newNode()
        layer:setContentSize(display.width, display.height)
        layer:setTouchEnabled(true)
    else
        layer = cc.Layer:create()
    end

    return layer
end