明天就要上班了,今天来个猛的!

多做几个针对性功能并且常用的组件比较实用

而且你这东西,一个根结点下不能有同名的结点,如果100个结点,你都给我行成成员变量,好浪费,有时只要用其中一两个.

好问题,只有以“_”开始的节点名才会绑定,既然能绑定一堆,就能实现只绑定一个。
不知道你看到过滤器的用法没有,通过过虑器可以排除不需要绑定的节点。

我现在计划有好几个组件,其中有一个是可编程Label,目前公司有新任务,估计要过几天。
还有计划是把uililler与可通用组件分成两个仓库。
uikiller主要是增加插件,属于被动技能。
可通用组件变化会比较大,会频繁更新,适合玩耍,也可自己拿去改造,提供一种思路,属于请动技能。
我的UI编程方案主要是这两条线。

还有网络编程、异步动画编程、自动化工程、MVC框架,只能一点点慢慢来了。

还有一个要命的,代码提示怎么弄?写代码的时候老是要去查看creator多麻烦.

Creator和Unity的做法是,让视觉设计与逻辑实现分离,你现在基本把他们耦合起来了.在代码里有自己代码的命名,在视觉设计里有自己的命名法,通过一次绑定做连接,低耦合.

非常棒!!!!
请问哪里有的下载 这些范例。

代码提示确实是个问题,动态绑定的属性IDE无法识别,目前没有好的办法!还要的是,你写过一次以后,IDE工具会优先提示!

这个UI绑定工具并不是在Creator项目中发明出来的,他是我用cocos2d-js + cocostudio 的时实践出的一种UI编程方案,减少了大量的seekWidgetByName,getChildByName等操作,还有大量的事件绑定addTouchEventListener,几乎看不到这些API的踪影。而且用它做了好几个项目,项目中有新人参与时,初期只需要把规则弄清楚,就可以很快进入UI开发工作,而且有相对高效的产出。
在对UI节点进行遍历绑定、事件注册的过程中可以掌控所有的节点和事件,又有了各种扩展的可能,记得在cocostudio中只有一个TextField控件,但他的使用体验太差了,还有一个选择是EditBox控件,但cocostduio编辑器不支持。为了解决这个问题我做了一个插件,在节点遍历的过程中,只要是TextField就把它替换成EditBox,但EditBox的大小,占位文本,输入类型,都是使用的TextField控件在编辑器上的设置。
cocostduio上有个ListView,不支持虚拟列表,数据量一大就不能用。我们使用Layout控件当tag为9999时(cocostudio中节点有tag属性),将他替换成TableView,在Layout控件的用户自定属性中,还可以配置TableView的Item类名,用起来非常的流畅。
再说一下触摸事件,触摸事件对不少新手来说很头痛,光是一个this可能会把它们绕晕,还有在cocos2d-js中为普通节点注册触摸事件与从Widget上继承的节点的触摸事件还不一样,只为一个节点注册事件代码行数就不少。如果一个界面中有十几个节点需要注册事件,那整个文件模块里面估计有一两屏的代码都是在seek节点,注册事件。

在Creator中我也对比过使用了自动绑定和不使用绑定去生产一个功能模块,不论是在可读性、代码量、开发效率上都会有很大的不同。尝试用它做一个小demo,再尝试不用它再做一次,你会有更深的体会。

再附上最初在cocos2d-js中的博客:
http://blog.csdn.net/6346289/article/details/42453479 (用法)
http://blog.csdn.net/6346289/article/details/43485757 (长按实现原理)
http://blog.csdn.net/6346289/article/details/44130641 (事件注册)

1赞

用法是有了,可是怎么安装呢?

没有安装,将对应的源码复制到自己工程中去

uikiller对应的源码
https://github.com/ShawnZhang2015/uikiller

组件已经单独放到另外的仓库上了,主要是这几个库文件目录
https://github.com/ShawnZhang2015/MagicComponent

放到项目目录下面了,然后也按照test1.js里面的用法用了,但是不行。
我是在现在的项目的主场景里加了一个button,然后重命名为_button,然后在uikiller.bindComponent(this);的后面加了一句cc.log(this._button.name);运行就报错TypeError: this._button is undefined
我是在firefox浏览器里运行的
而且我打开你的项目,运行场景test1是可以的,不知道问题出在哪里了

知道怎么回事了,因为我的脚本是新建的一个跟canvas同级的节点,而_button是挂在Canvas下面的,所以找不到,感觉这个应该改进成跟节点级别无关或者至少在文档里加以说明,不然真的是莫名其妙。

还提个意见,默认绑定事件的名称为什么要跟节点的名称不一样呢,这样很让人疑惑,我觉得应该就是on加节点名再加事件名,不要搞得那么复杂。

很高兴你能提出你的意见,目前事件函数的名命规则是,前缀 + 中缀 + 后缀组成,具体公式如下

“_on” + 节点名(去下划线,且首字母大写) + 事件名

例如一个节点名为_button的触摸结束事件,事件函数名为:

_onButtonTouchEnd

这样设计事件函数名遵循了下面2点:

  1. 驼峰名命:这是javascript目前最为流行的代码规范
  2. 私有函数:采用‘‘_’’开始的变量或函数定义为私有,是cocos-js、creator都使用这种习惯,其它javascript库大我也使用这种习惯。当对象的方法被外部调用时,容易识别出那些函数可以被调用,那些不能被调用,自己在编写模块代码时,也能方便看到那些是类的私有函数。

早在cocos-js的时代,UILoader的前缀是可以自定义的,比如可以定义捕获编辑器中以"m_"为前缀的节点,使用"on"做事件前缀。

sz.uiloader.widgetFromJsonFile(this, uiFile, {eventPrefix: ‘on’, memberPrefix: ‘m_’});

后来在移值Creator时结合之前的项目经验和使用场景,这些功能用的很少,而且选项多了使用难度会更大。为了降低代码的复杂度和上手难度,就将这部分功能给去掉了。

uikiller.bindComponent的第二个参数是预留的一个options的对象,将来要做扩展也是有机会的。

上面的解释能否解答你的疑惑,欢迎继续交流。

节点名(去下划线,且首字母大写)
这种规范有点复杂,不直观,另外在脚本里的事件方法其实算不上是私有函数也没必要加上下划线。
还有,我发现一个问题,如果某个节点是第二层甚至是第N层的子节点,即使加上_也没法触发触摸事件,而且第N层子节点的命名也容易重复,应该有个机制解决这个问题。

你的这个需求,可以加到经后的版本中

你可以尝试下uikiller中的测试范例,里面test1就有多层子节点的用法。我在项目中也是正常使用的,不论多少层子节点。 如果你在使用上任然有问题,可以发一个demo我给你看看。

你别搞的太复杂了,增加了学习成本,新手连基本的api都用不熟,在这官方的用法套上你包装的这一层,损失了灵活性,又易错

针对具体功能的组件,插件,可以挂在节点上直接用的黑盒子比较容易吸引用户支持

恩,感谢你的建议,初衷就是为了简易性少错误,代码更清晰,随后还要关注灵活性,他们又是一对矛盾的综合体,要做到面面具到还需要,不断的进化。
只需要记住两点就可以了:

  1. 驼峰名命
  1. 私有成员前面加“_”

我发现新手主要出错在节点的事件注册太罗嗦,事件回调函数this容易出错,这两点uikiller都解决了,上层代码基本上看不到这些api的影子,也就减少了低级错误的机率。