您的位置:首页 > 移动开发 > Cocos引擎

Cocos2d-x CocosWidget 项目配置及API说明

2014-03-10 14:10 204 查看
http://blog.csdn.net/cocosviva/article/details/17381847

目前为止已经有很多大神在使用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开发中一路畅通无阻。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: