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中添加按钮等需要按下事件的对应的函数名字。
但目前,只支持没有参数的函数调用。

cocos2d-x的lua脚本如何获得Cocostudio中UI控件的对象

上一节中讲了如何加载cocostudio的UI文件(参考:cocos2d-x的lua脚本如何加载Cocostudio制作的UI文件) 那么我们如何获取UI上的控件呢?答案是通过Name或Tag查找,使...
  • oracleot
  • oracleot
  • 2014年02月19日 00:29
  • 8576

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

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

【cocos2d-x 3.5】Lua常见UI的代码实现

1.Label local label = cc.Label:create() label:setString('abc Label From Lua') -- 设置 label 的文本内容。 lab...
  • slow_liao
  • slow_liao
  • 2015年04月27日 16:49
  • 1376

Windows下新建Cocos2d-x V3.10项目(cocos2d-x lua)

好久没更新了,最近2个月忙了不像话了。此处略去2W个字。。。。 言归正传,我刚刚接触游戏就是用的quick引擎,但是目前的这份工作是cocos2d-lua V3.10的,对我来说,有些迷茫,很多底层的...
  • sung26
  • sung26
  • 2016年07月05日 10:33
  • 3286

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

--------------------------- Button控件按钮使用 ----------------------------------------- --lua 中 Button按钮...
  • chinahaerbin
  • chinahaerbin
  • 2015年04月20日 11:49
  • 12415

quick-cocos2dx-luaUI控件讲解

quick-cocos2dx中,使用lua
  • In_Zihuatanejo
  • In_Zihuatanejo
  • 2015年10月28日 13:31
  • 1133

cocos3.x 编写C++控件在lua上面调用(一)

由于之前的代码出现了许多不足的地方,所以花了一段时间来重写这个控件的...
  • t11963220
  • t11963220
  • 2014年08月08日 14:30
  • 356

cocos2dx 3.1.1 Lua常用控件

require "Cocos2d" require "Cocos2dConstants" -- cclog cclog = function(...)     print(string.forma...
  • u013174689
  • u013174689
  • 2014年08月26日 20:25
  • 2115

cocos2d-x lua 使用自定义消息EventCustom

cocos2d-x lua 使用自定义消息EventCustomversion: cocos2d-x 3.61.发送消息-- post message -- event将会被传递给消息接收函数,所以所...
  • songcf_faith
  • songcf_faith
  • 2015年06月03日 17:45
  • 3463

cocos-lua-Nodex

NODE扩展
  • u010664312
  • u010664312
  • 2016年06月23日 00:20
  • 286
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:cocos2dx3.10-lua_使用官方示例的方式获取UI控件
举报原因:
原因补充:

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