cocos2dx ui编辑器生成界面的管理

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/dinko321/article/details/44408181

        说这个问题之前,先说不用各种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就行了。。。



        脚本就是方便啊!!

展开阅读全文

没有更多推荐了,返回首页