目前为止已经有很多大神在使用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开发中一路畅通无阻。

Cocos2d-x CocosWidget项目配置与API说明的更多相关文章

  1. ios – 如何使对象ID具有人类可读性?

    故事板上的每个UIView都有一个唯一的对象ID,类似于:kvf-NI-koG我想知道有没有办法让这个更友好,例如’myLabel’?

  2. 早期Swift中Cocos2D初始化代码的重构

    但是遗憾的是Swift2.2中还是不支持Type的class属性关键字,只能用static,我们期待Swift3的改进吧!

  3. Swift 3.0 API设计准则

    Swift代码的简洁性,不是指使用最少的字符来实现程序代码。Swift编程的简洁性带来的一个副作用是由强类型系统和减少引用文件的特性决定的。使用Swift的标记语法,为每一个方法和属性写注释性文本。{在初步设计时,编写注释性文档是一个好的主意,因为这能使你对API设计有更深入地理解,从而有利用于API的进一步设计。

  4. 手把手教你swift项目添加cocos2dx-lua

    去倒杯水吧,这个过程会很久。。。至此,工程已经全部配置完毕,你已经解决一个大Boss了;今天就到这里吧,之后我们再续如何用swift调用lua手把手教你swift项目添加cocos2dx-lua

  5. 手把手教你swift项目集成cocos2dx-js模块

    前几天在swift项目中集成了Lua模块,使得在swift工程中用Lua写游戏逻辑成为了可能,具体工程及配置见手把手教你swift项目添加cocos2dx-lua,由于公司最近要把js做的小游戏集成到iOS原生应用中,于是我们将解锁另外一个场景,好了,下面开始;同样的,首先你得有一个swift项目我们从头开始,建立一个swift项目;我们默认你已经可以自己创建一个全新的swift项目了,这很简单,不是么?

  6. 有没有办法在保持minSDK版本为3的同时使用Android 2.1/2.2中的功能?

    我有一个项目只是使用Android1.5进行编程,但随着Android2.2中其他手机和一些很酷的功能的增加,我们希望支持这些功能,而不会失去对1.5的支持或分支新的代码库.是否可以使用AndroidSDK?

  7. android – 尝试在Cocos2d-X C中设置一个带整数的CCLabelTTF作为它的字符串的一部分

    所以在使用Cocos2d的Objective-C中,我使用带有格式的NSMutableString将变量(得分)放入字符串中.我拿这个字符串并使用cclabel将它放在屏幕上.使用Cocos2D-x,我很难找到获得此结果的方法.一个简单的例子就是很棒.谢谢!

  8. Android N Java8 java.time

    我更新到最新的AndroidNsdk.我唯一不明白的是为什么我不能将java.time导入我的代码?我以为Java8是可以通过AndroidN.然后为什么Google没有添加java.time包?

  9. PHP开发api接口安全验证操作实例详解

    这篇文章主要介绍了PHP开发api接口安全验证操作,结合实例形式详细分析了PHP开发api接口安全验证的原理、操作技巧与注意事项,需要的朋友可以参考下

  10. PHP API接口必备之输出json格式数据示例代码

    这篇文章主要给大家介绍了关于PHP API接口必备之输出json格式数据的相关资料文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。

随机推荐

  1. 【cocos2d-x 3.x 学习笔记】对象内存管理

    Cocos2d-x的内存管理cocos2d-x中使用的是上面的引用计数来管理内存,但是又增加了一些自己的特色。cocos2d-x中通过Ref类来实现引用计数,所有需要实现内存自动回收的类都应该继承自Ref类。下面是Ref类的定义:在cocos2d-x中创建对象通常有两种方式:这两中方式的差异可以参见我另一篇博文“对象创建方式讨论”。在cocos2d-x中提倡使用第二种方式,为了避免误用第一种方式,一般将构造函数设为protected或private。参考资料:[1]cocos2d-x高级开发教程2.3节[

  2. 利用cocos2dx 3.2开发消灭星星六如何在cocos2dx中显示中文

    由于编码的不同,在cocos2dx中的Label控件中如果放入中文字,往往会出现乱码。为了方便使用,我把这个从文档中获取中文字的方法放在一个头文件里面Chinese.h这里的tex_vec是cocos2dx提供的一个保存文档内容的一个容器。这里给出ChineseWords,xml的格式再看看ChineseWord的实现Chinese.cpp就这样,以后在需要用到中文字的地方,就先include这个头文件然后调用ChineseWord函数,获取一串中文字符串。

  3. 利用cocos2dx 3.2开发消灭星星七关于星星的算法

    在前面,我们已经在GameLayer中利用随机数初始化了一个StarMatrix,如果还不知道怎么创建星星矩阵请回去看看而且我们也讲了整个游戏的触摸事件的派发了。

  4. cocos2dx3.x 新手打包APK注意事项!

    这个在编译的时候就可以发现了比较好弄这只是我遇到的,其他的以后遇到再补充吧。。。以前被这两个问题坑了好久

  5. 利用cocos2dx 3.2开发消灭星星八游戏的结束判断与数据控制

    如果你看完之前的,那么你基本已经拥有一个消灭星星游戏的雏形。开始把剩下的两两互不相连的星星消去。那么如何判断是GameOver还是进入下一关呢。。其实游戏数据贯穿整个游戏,包括星星消除的时候要加到获得分数上,消去剩下两两不相连的星星的时候的加分政策等,因此如果前面没有做这一块的,最好回去搞一搞。

  6. 利用cocos2dx 3.2开发消灭星星九为游戏添加一些特效

    needClear是一个flag,当游戏判断不能再继续后,这个flag变为true,开始消除剩下的星星clearSumTime是一个累加器ONE_CLEAR_TIME就是每颗星星消除的时间2.连击加分信息一般消除一次星星都会有连击信息和加多少分的信息。其实这些combo标签就是一张图片,也是通过控制其属性或者runAction来实现。源码ComboEffect.hComboEffect.cpp4.消除星星粒子效果消除星星时,为了实现星星爆裂散落的效果,使用了cocos2d提供的粒子特效引擎对于粒子特效不了

  7. 02 Cocos2D-x引擎win7环境搭建及创建项目

    官网有搭建的文章,直接转载记录。环境搭建:本文介绍如何搭建Cocos2d-x3.2版本的开发环境。项目创建:一、通过命令创建项目前面搭建好环境后,怎样创建自己的Cocos2d-x项目呢?先来看看Cocos2d-x3.2的目录吧这就是Cocos2d-x3.2的目录。输入cocosnew项目名–p包名–lcpp–d路径回车就创建成功了例如:成功后,找到这个项目打开proj.win32目录下的Hello.slnF5成功了。

  8. 利用cocos2dx 3.2开发消灭星星十为游戏添加音效项目源码分享

    一个游戏,声音也是非常的重要,其实cocos2dx里面的简单音效引擎的使用是非常简单的。我这里只不过是用一个类对所有的音效进行管理罢了。Audio.hAudio.cpp好了,本系列教程到此结束,第一次写教程如有不对请见谅或指教,谢谢大家。最后附上整个项目的源代码点击打开链接

  9. 03 Helloworld

    程序都有一个入口点,在C++就是main函数了,打开main.cpp,代码如下:123456789101112131415161718#include"main.h"#include"AppDelegate.h"#include"cocos2d.h"USING_NS_CC;intAPIENTRY_tWinMain{UNREFERENCED_ParaMETER;UNREFERENCED_ParaMETER;//createtheapplicationinstanceAppDelegateapp;return

  10. MenuItemImage*图标菜单创建注意事项

    学习cocos2dx,看的是cocos2d-x3.x手游开发实例详解,这本书错误一大把,本着探索求知勇于发现错误改正错误的精神,我跟着书上的例子一起调试,当学习到场景切换这个小节的时候,出了个错误,卡了我好几个小时。

返回
顶部