cocos2dx3.10-lua_使用官方示例的方式获取UI控件

以下是在cocos2dx-3.10-lua中


1.概述
cocosstudio的MainScene.csb中
Scene
--bg
--Btn_1
--Check_1




2.实例
(1)传统的获取UI控件的方法如下:
MainScene.lua--------------
local MainScene = class("MainScene", cc.load("mvc").ViewBase)


-- 加载csb文件
MainScene.RESOURCE_FILENAME = "MainScene.csb"


function MainScene:onCreate()
-- 获得UI根节点
    sself.root = self:getResourceNode()
-- 按钮使用
    self.btn = self.root:getChildByName("Btn_1")
self.check_1 = self.root:getChildByName("Check_1")
end


return MainScene


(2)cocos2dx-3.10-lua演示中获取UI控件的方法如下:
MainScene.lua--------------
local MainScene = class("MainScene", cc.load("mvc").ViewBase)


-- 加载csb文件
MainScene.RESOURCE_FILENAME = "MainScene.csb"


-- 获取UI控件
MainScene.RESOURCE_BINDING = {
    ["Btn_1"]   = {["varname"] = "btn",  ["events"] = { {event = "click" ,  method ="onBack"   } }  },
    ["Check_1"] = {["varname"] = "check_1"},
}


function MainScene:onCreate()
    -- 按钮使用
    self.btn:addClickEventListener(function(sender)
        print("info","****")
    end)


    self.check_1:setVisible(false)
end


function MainScene:onBack()
  --按下按钮
end


return MainScene


注意:
-- 获取UI控件
MainScene.RESOURCE_BINDING =
{
  ["cocos控件名"] = {["varname"] = 引用变量名 }
    ...
}


分析ViewBase如何创建及获取UI控件:
function ViewBase:ctor(app, name)
    self:enableNodeEvents()
    self.app_ = app
    self.name_ = name


    -- check CSB resource file
    -- 搜索csb文件
    local res = rawget(self.class, "RESOURCE_FILENAME")
    if res then
        --加载CocosStudio编辑出来的*.csb 文件 
        self:createResoueceNode(res)
    end


    -- 查询csb文件控件名
    local binding = rawget(self.class, "RESOURCE_BINDING")
    if res and binding then
        -- 获取UI上的控件并且保存起来
        self:createResoueceBinding(binding)
    end


    if self.onCreate then self:onCreate() end
end


function ViewBase:getResourceNode()
    return self.resourceNode_
end


function ViewBase:createResoueceNode(resourceFilename)
    if self.resourceNode_ then
        self.resourceNode_:removeSelf()
        self.resourceNode_ = nil
    end
    self.resourceNode_ = cc.CSLoader:createNode(resourceFilename)
    assert(self.resourceNode_, string.format("ViewBase:createResoueceNode() - load resouce node from file \"%s\" failed", resourceFilename))
    self:addChild(self.resourceNode_)
end


function ViewBase:createResoueceBinding(binding)
    assert(self.resourceNode_, "ViewBase:createResoueceBinding() - not load resource node")
    for nodeName, nodeBinding in pairs(binding) do
        local node = self.resourceNode_:getChildByName(nodeName)
        if nodeBinding.varname then
            self[nodeBinding.varname] = node
        end
        for _, event in ipairs(nodeBinding.events or {}) do
            if event.event == "touch" then
                node:onTouch(handler(self, self[event.method]))
            end
        end
    end
end


由上可知,createResoueceBinding函数的用途就是从UI根节点获得控件,然后将其赋值给对应RESOURCE_BINDING中
的对应名字的对象。
此外,你也可以在RESOURCE_BINDING中添加按钮等需要按下事件的对应的函数名字。
但目前,只支持没有参数的函数调用。

你可能感兴趣的:(cocos2dx)