目前为止已经有很多大神在使用CocosWidget了,但是大神们可能对这套框架还有那么一点点不熟悉,导致有些地方出不来效果等等,特写此文,总结一下CocosWidget的Test项目配置方法以及各个控件API的说明,以后有版本更新的情况,此篇文章也会做对应更新,请以此篇文章做基准。
示例项目配置:
目前示例项目是在cocos2d-x 2.2.0 版本上运行的。但是库代码可以在2.0之后的任意版本运行,直接作为源码添加到您的项目中
1:通过版本发布的地址下载CocosWidget,或者通过github or googlecode直接把所有东西从版本库上拉出来
2:大神们这时会看见三个目录,分别为 CocosWidget,Cpp,Lua
2.1:CocosWidget目录下是库的所有源代码,直接把这个目录作为源码加入到您的项目里,可以直接使用
2.2:Cpp目录下是C++的示例代码,每个Test对应一个目录,方便搜索
2.3:Lua目录下是Lua的示例代码,Lua代码全部在Resources下的luaScript下,每个示例对应一个Lua文件
2.4:需要运行Cpp示例时,修改CocosWidget目录下的WidgetMacros.h里面的宏,设置USING_LUA 0,需要运行Lua项目时,则设置为USING_LUA 1
3:示例代码的MAC版,有些大神反应,在某些版本的XCode里项目配置的有问题,如果有问题,请大神您自己配置一下。
4:Windows下不可同时使用Cpp与Lua项目,因为USING_LUA这个宏肯定会导致其中一个项目编译不过去。
CocosWidget API:
关键名词:
1:控件树:CWidgetLayout是控件树的根节点,其Children就是在控件树上的节点
2:向下分发:向Children(子节点)分发。
控件事件分发模型:
1:与引擎的完美结合的意思是,所有控件都从CCNode继承,添加删除接口不变,全部以addChild与removeChild来操作。
2:控件树的概念,引擎提供的CCScene是引擎渲染树的根节点,那么CWidgetLayout被addChild到某个节点上后,这个CWidgetLayout就会作为控件树的根节点,类似于分支的概念。
3:所有控件的触摸事件,一律从CWidgetLayout作为入口,向下进行分发,CWidgetLayout一定要作为控件树上的根节点,所有CWidgetLayout最好保持平级关系。
4:当事件从CWidgetLayout进来之后,再向下分发的过程,就比较简单和自由了,CWidgetLayout会把触摸事件发给与触摸点重合的子控件(继承自CWidget的对象),子控件根据处理方式,选择 自己处理 or 继续向下分发,例如CButton会选择自己处理,CPanel或者CScrollView会选择继续向下分发。
5:CPanel作为容器控件的顶级父类,因为CPanel具有把事件继续向下分发的功能,如果要实现自定义容器控件,最好继承CPanel。
6:基础控件是不具备事件向下分发的功能,例如CButton,这个CButton不会再把这个触摸事件向Children分发。
7:触摸处理类型分为
7.1:eWidgetTouchNone(这个控件完全不理会触摸事件)
7.2:eWidgetTouchTransient(暂时性接收事件,会被上级控件所中断,例子:CScrollView里有CButton,点着CButton也能拖动,说明CScrollView发现是拖动操作,于是就把CButton的触摸事件给中断了,会调用CButton的onTouchCancelled);
7.3:eWidgetTouchSustained(持续性接收事件,这个事件不会被上级控件中断,只能由本控件自行中断)。
8:控件树上会出现控件对象(继承自CWidget)和非控件对象(没有继承CWidget),只有控件对象能接收触摸事件。这也是CocosWidget的完美之处。
注意事项:
1:有很多大神喜欢用一个层来把不同功能的控件分开来管理,这种想法是非常正确的,但是很多大神喜欢用CCLayer或者CCNode来作为管理层。这样是不可行的,根据上面触摸事件分发机制的说明,非控件对象(不是继承自CWidget的对象)是不会接收触摸事件的,所以希望事件正确向Children传递,请使用CPanel。
CGridPageView控件:
特别说明一下这个控件,目前来讲,这个控件能够基本满足所有游戏里的背包系统,所以Viva提醒一下大神们,开发背包系统时,首选CGridPageView。
CTableView控件:
效仿引擎本身提供的CCTableView, 有些大神一直对这个控件有唾弃的心态,其实是大神们没有仔细看过里面的源码和Cell重用机制(虽然Cell重用机制在游戏开发里比较鸡肋,很少有成百上千条数据出现),现在Viva大致来说明一下Cell重用机制,用到这个机制的控件还有CGridPageView,CPageView,CGridView。Cell重用的意思,就是重复利用Cell对象,解释一段代码
if( Cell没有被创建 )
{
创建Cell,并创建Cell里的精灵,控件等等
}
else
{
Cell已经被创建,那么就直接替换Cell里的内容,比如说精灵的纹理,Label的文字等。
}
接下来也没什么好写的了,相信各位大神,看源码10分钟就能了解整个结构,如果您能把以上几条搞明白,那CocosWidget已经属于您了,您可以开始随意修改、无限拓展了。祝各位大神在2013年以后的cocos2d-x GUI开发中一路畅通无阻。