文档章节

UI系统-版本1

梦想游戏人
 梦想游戏人
发布于 2017/05/12 15:33
字数 434
阅读 35
收藏 0
点赞 0
评论 0

cocos2dx 3.10版本提供了 cocos studio 界面导出到lua,还提供了一套基本的MVC框架。

再次基础上改进代码,实现以下功能

1.无需手动填写 RESOURCE_BINDING 的内容,

2.Button 自动根据ui名字绑定到 函数名,比如 btnClose,的单击会被绑定到函数 ui_btnCloseClicked,这样,只需要在cocostudio重命名,然后lua在脚本添加函数ui_btnCloseClicked 即可。

3.ui的元素自动绑定到table成员,比如有个txtTips,lua脚本,里面使用直接self.ui.txtTips:setString("11");,方便快速开发

 

eg:添加一个新按钮流程

cocostudio 添加一个按钮名字为btnNew,导出资源为lua格式

MainScene.lua添加函数 ui_btnNewClicked ,即为点击事件回调

 

重构后的代码

MainScene.lua


local t = class("MainScene", cc.load("mvc").ViewBase)

t.RESOURCE_FILENAME = "res/MainScene.lua"
t.RESOURCE_BINDING =
{
    -- ["Button_1"]={["varname"]="Button_1",["events"]={{["event"]="touch",["method"]="onBtnTouch"}}},
    --  ["Text_1"] = {["varname"] = "txt_info"},
    -- ["Panel"] = {["varname"] = "Panel"},
};

function t:onCreate()
    printf("resource node = %s", tostring(self:getResourceNode()))
end

function t:ui_btnCloseClicked()
    print("  close");
end

function t:ui_btnSendClicked()
    print("  send");
    self.counter =(self.counter and self.counter + 1) or 0;
    self.ui.txtInfo:setString("12344 " .. self.counter);
end

function t:ui_Panel_Panel2_btnShowClicked()
    print("  pp show");
end

function t:ui_Panel_btnShowClicked()
    print("show   " .. self.counter);
end

return t

 

ViewBase.lua


function ViewBase:ctor(app, name)
    self:enableNodeEvents()
    self.app_ = app
    self.name_ = name

    -- check CSB resource file
    local res = rawget(self.class, "RESOURCE_FILENAME")
    if res then
        self:createResoueceNode(res)
    end

    local binding = rawget(self.class, "RESOURCE_BINDING")
    if res and binding then
        self:createResoueceBinding(binding)
    end

    if self.onCreate then self:onCreate() end
    self.ui = { };
    self.ui.root = self.resourceNode_;
    self:autoBind(self.resourceNode_);
end

function ViewBase:getFullParentName(node)
    local parent = "";
    if node and node ~= self.ui.root then
        local tmp = node;
        while tmp:getParent() ~= self.ui.root do
            parent = tmp:getParent():getName() .. "_" .. parent;
            tmp = tmp:getParent();
        end
    end
    return parent;
end

function ViewBase:autoBind(node)
    for _, v in pairs(node:getChildren()) do
        print(v:getName());
        local node_name = v:getName();

        if string.find(node_name, "btn") then
            -- bind button
            v:onTouch( function(e)
                if e.name == "ended" then
                    local name = self:getFullParentName(v) .. node_name .. "Clicked";
                    local cb = self["ui_" .. name];
                    if cb then
                        cb(self);
                    else
                    end

                end
            end );
        end
        self.ui[self:getFullParentName(v) .. node_name] = v;
        -- bind var
        self:autoBind(v);
        -- bind child
    end
end

 

 

© 著作权归作者所有

共有 人打赏支持
梦想游戏人
粉丝 34
博文 413
码字总数 116720
作品 0
成都
笔记53 | 管理系统UI(一)

淡化状态栏和系统栏 如果要淡化状态和通知栏,在版本为4.0以上的Android系统上,你可以像如下使用这个标签。 一旦用户触摸到了状态栏或者是系统栏,这个标签就会被清除,使系统栏重新显现(无...

项勇
2017/12/19
0
0
centos 6 下pinpoint搭建

Centos 6 Pinpoint 环境搭建 一安装jdk1.6、1.7、1.8 备注:在安装过程中发现,最新的pinpoint 1.5.2与最新的JDK1.8好像不兼容,所以设置系统环境变量和jre用jdk1.7,pinpoint安装1.5.1版本,...

孤单一吻灬
2016/01/06
2.9K
9
浅谈APP开发报价单的组成

当企业想要开发APP软件时,都想要了解那家公司的报价情况,却总是被告知需先要了解清楚功能需求,因此企业就会进行货比三家。那么APP开发报价单由哪些部分组成呢? 1、UI设计费用 UI设计费用...

英趣科技
2016/12/14
26
0
CSS 栅格系统原理分析

众所周知,现在前端有很多类似于bootstrap,foundation这样优秀的UI框架,它们都提供了自己的一套响应式布局方案,即栅格系统。用过的人都知道只要给页面的元素添加其栅格系统指定的类名,就...

爱coding的husky
2017/11/03
0
0
基于JFinal的开发平台和权限管理系统--JFinalUIB

非常全面的JFinal项目,里面包含了众多的JFinal知识点应用和扩展开发,很多功能都可以抽取出来应用到自己的JFinal项目中,也可以直接基于JFinalUIB做项目开发,它只是做了很多项目都必须做的...

littleant
2014/05/15
56.6K
22
《UI框架—基于Unity5.4UGUI(一)》

在这里和大家分享一下最近学习的一个UI框架,同时方便自己理解记忆和回顾。本UI框架是基于Unity5.4版本的,不过4.6版本以上应该都没问题。当然,你也完全可以使用NGUI插件完成UI部分,然后使...

say__yes
2017/07/01
0
0
搭建storm集群(apache-storm-0.9.5.tar.gz)

前期准备:3台服务器: 192.168.1.115 192.168.1.116 192.168.1.117 去storm官网下载响应版本的软件包:http://storm.apache.org/downloads.html 在这里下载的是: wget http://mirrors.hust...

chaun
2016/10/27
43
0
透明系统栏及沉浸模式的总结

关于所谓的“沉浸式”,我有许多话要说,因为这个东西实在是折磨了我许多的时间。实现的方式有许多,兼容性问题也不少。官方文档也让我感到也有些云里雾里。那些“长得很相似”的Flag,适用情...

一剑围城
2017/05/03
0
0
开拓者Linux 7.0 正式版发布-2011.5.31

本程序的作用: 1.快速安装,配置,可以让新手免去配置问题 2.可以支持开拓者旧版的版本升级到新版 3.纯净快速,免去大家刻盘安装,不用重装系统,不用刻盘,升级程序仅仅47.9 MB (50,318,5...

开拓者Linux
2011/05/31
1K
2
android PopupWindow空指针异常问题 低版本的小细节

这段时间在用PopupWindow做界面的更多操作菜单,发现一个很奇异的问题; 在创建继承PopupWindow的自定义弹出菜单,在高版本的安卓系统中是没有任何问题,但是在2.x系列的系统中就会奔溃,报错...

火蚁
2014/08/22
2.7K
3

没有更多内容

加载失败,请刷新页面

加载更多

下一页

(转)SQL语句的执行顺序

(7) SELECT (8) DISTINCT <select_list> (1) FROM <left_table> (3) <join_type> JOIN <right_table> (2) ON <join_condition> (4) WHERE <where_condition> (5) GROUP BY <group_by_list> (......

Avner
16分钟前
0
0
1.14 救援模式

确保开机启动时连接镜像文件,如果是真机服务器,就需要:U盘或光盘镜像启动进入BIOS 不同主板进入bios按键不同,一般是F12或Esc 光标:移动到Boot(开机启动项) 减号移动:光标选中行,按-...

小丑鱼00
24分钟前
0
0
ES11-全文检索

高级别全文检索通常用于在全文本字段(如电子邮件正文)上运行全文检索。 他们了解如何分析被查询的字段,并在执行之前将每个字段的分析器(或search_analyzer)应用于查询字符串。 1.term查...

贾峰uk
27分钟前
0
0
java 复制对象有哪些方式

java 复制对象有哪些方式 Apache的 Common beanutils库 org.apache.commons.beanutils.BeanUtils.copyProperties(dest,origin); Springframework 的BeanUtil 依赖: <dependency> ......

黄威
43分钟前
1
0
jstack的简单使用

公司测试反应, 一个java应用的机器, 即使不做交易, cpu始终是30%多, 于是想到了jstack, 实践步骤记录一下: 1, 找出java应用的进程号 ps -ef|grep 应用名|grep -v grep 2, 找出pid下的cpu占用...

零二一七
49分钟前
1
0
崛起于Springboot2.X之项目war打包部署(18)

将springboot项目打包步骤: 1、启动类 extends SpringBootServletInitializer 2、启动类添加覆盖方法 @Overrideprotected SpringApplicationBuilder configure(SpringApplicationBuilder......

木九天
58分钟前
2
0
导入CSV文件就行数据整理分析

#-*-coding:utf-8-*-import csv,os,re,mathlocalPath=input("请输入所有群文件的根目录:") #所有QQ群文件的物理根目录路径def info(): info_dic=[] dirList=os.listdi...

Kefy
今天
5
0
CoreText进阶(六)-内容大小计算和自动布局

CoreText进阶(六)-内容大小计算和自动布局 其它文章: CoreText 入门(一)-文本绘制 CoreText入门(二)-绘制图片 CoreText进阶(三)-事件处理 CoreText进阶(四)-文字行数限制和显示更...

aron1992
今天
1
0
一个Unity高人的博客,涉猎范围很广,深度也很深。

https://blog.csdn.net/ecidevilin/article/list/

爽歪歪ES
今天
0
0
Spring Cloud Config-Git后端

EnvironmentRepository的默认实现使用Git后端,这对于管理升级和物理环境以及审核更改非常方便。要更改存储库的位置,可以在Config Server中设置“spring.cloud.config.server.git.uri”配置...

itcloud
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部