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

原创 2016年08月05日 13:13:19
以下是在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中添加按钮等需要按下事件的对应的函数名字。
但目前,只支持没有参数的函数调用。

相关文章推荐

cocos2dx3.0-lua获取cocosstudio场景以及获取ui等控件

local node = ccs.SceneReader:getInstance():createNodeWithSceneFile("background_wave.json") ...
  • five50
  • five50
  • 2014年02月26日 16:32
  • 4285

cocos3.0 从main.lua开始

Main.lua是Cocos2d-lua项目的默认入口,即项目启动时,首先执行这个文件。(我们也可以修改config.json文件的entry字段来配置入口文件) main.lua中进行了几项操作:...

在 Lua 里 使用 Cocos Studio 导出的 .csb 文件

1. 加载 节点到场景 第一种方法 local scene = cc.CSLoader:createNode("scene.csb")  self:addChild(scene) 第二种方法 loc...

cocos2d-lua里如何加载csb文件

local node = cc.CSLoader:createNode("res/csb/loading.csb") node:addTo(self)

3、cocos2d-Lua的运行流程与场景

打开工程根目录下的配置文件config.json: {"init_cfg": {"isLandscape": true,"isWindowTop": false,"name": "redDefe...
  • asmcvc
  • asmcvc
  • 2015年07月13日 18:32
  • 5254

quick-cocos2d使用shader上色置灰问题

最近做项目碰到使用shader上色置灰的问题,与大家分享一下: 我们用的是quick-3.5版本+CocosStudio2.3.2,UI布局基本都是用CocosStudio来做的,结果发现直接通过 ...

Lua笔记:Button控件按钮创建及使用

--------------------------- Button控件按钮使用 ----------------------------------------- --lua 中 Button按钮...

cocos2dx用checkbox实现单选框和button实现table按钮

转载请注明出处:帘卷西风的专栏(http://blog.csdn.net/ljxfblog) cocos2dx有checkbox和button,但是checkbox是个复选框,也没有table按钮,本...

cocos2dx之创建Button

利用CCControlButton创建一个Button,代码如下: void MyBottonBastLayer::initLayer() { CCSize size = CCDirector...

cocos2dx 使用button控件

#include "gui/CocosGUI.h" using namespace gui; Button* buttonPlay = Button::create(); buttonPlay->...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:cocos2dx3.10-lua_使用官方示例的方式获取UI控件
举报原因:
原因补充:

(最多只允许输入30个字)