说这个问题之前,先说不用各种UI编辑器的时候,开发一个界面的样子。
比如我们要做这样一个界面(图片素材来自百度图片,侵权不怪我。。。)
我们应该肿么处理这个界面,为了代码好看,可以复用等原因,显然是应该分层分组件,就像这样。
然后我们开始编辑代码,分3个layer,每个layer里面加各种按钮,写上各种触发函数。然后其他地方要用,只需要实例化一个对象,addchild就可以了。
但是我们现在有了UI编辑器,比如cocosStudio,在编辑器里面,还是按照上面的步骤,编辑3个UI,一个是头像那一块headNode,一个是下面的菜单栏menuNode,然后再做一个层bgLayer,把2个node加上来。现在就有了3个界面布局文件。
然后程序里面读入。问题来了,这几个布局文件,读入进来,自己就是一个node,我们不能往里面添加代码。
仍然是为了上面的几个原因,现在有2种方法:
1、把每个node单独做到一个父node上面,通过这个父节点,对node里面的东西进行管理。
优点:直观,因为父节点也是一个node,可以直接进行node的添加删除变换等操作,传参方便,理解方便
缺点:多出一层,组件多的话,就会多出很多层。我有心理洁癖。还有一个重要缺点,后面说
2、做一个controller,对这个node进行管理。
优点:不会有方法1的前半部分缺点,符合MVC思想
缺点:不直观不方便。我不喜欢。其实最外层的node就已经是controller了,你要说这样VC混了也好,不科学也好,但是他就是方便。等我层次再高一点体会到这样的缺点了再说。
方法1上面还有一个重要的缺点,就是如果我把菜单栏按方法1做了一个父节点。那对于整个布局文件bgLayer,上面的子空间的那个菜单栏,是没法复用这个代码的,我又只能在这个bgLayer的父控件上面,去又实现一遍这些方法。
暂时没想到其他方法,只有这2种。
都有利有弊,意思就是谈不妥了。然后我找到一个使用很有局限,但是能达到我目的的方法:
大体上采用方法2,做controller,但是这个controller只是一个加工厂,把这些实现函数,附加给node本身。
怎么实现呢?因为lua本来就能这么做。。。把node传进来,然后直接往传入的node上面扩展各种函数,然后返回原来那个node就行了。。。
脚本就是方便啊!!
原文链接:https://www.f2er.com/cocos2dx/343959.html