Cocos2d-x CocosBuilder使用教程(二)连接自定义类
看来2013年2月最多只能写三篇技术博客了!今天学习使用了一下CocosBuilder的连接到自定义类的功能,确实很爽,让IOS的程序员们不必再硬编码了。通过看Cocosbuilder本身的document,以及搜索网上资料,加上自己查看CCB源码,完成连接自定义类的功能。首先需要注意一点,CocosBuilder的Document是针对Cocos2d-iPhone的而不是Cocos2d-x的,所以很多Document里面讲到的并不适用于Cocos2d-x。因为cocos2d-x是基于C++的,所以无法通过类名字符串来动态创建类(OC当然可以了),这也是为什么Cocos2d-x版本的CCB SDK在架构上添加CCNodeLoadLibrary的原因。
下面我将一步一步操作,并讲解其中原理,让你不但学会怎么做,而且还知其原理。
- 使用CocosBuilder 2.1版本新建一个Project,叫做“ConnectToCustomClass”(引号当然不算名称了,:p)。
新建一个文件,派生自CCLayer,并选择你想要的设备类型,我选择ipad landscape 1024 * 768,保存为“ConnectToCustomClass”(与项目工程一致)。
添加一个CCMenu节点到根节点(即CCLayer节点)。
添加一个CCMenuImage节点到CCMenu节点。
选中此节点,到CocosBuilder右侧的CCMenuItemImage段中,点击Normal和Selected字段,选择对应图片—isable不用的话可以不选择)。读者可以下载下列资源:
Normal:

Selected:

添加一个CCControlButton到根节点(即CCLayer节点)。
选择此节点,到CocosBuilder右侧的CCControlButton段更改“Font Size”字段为15。这里使用CCControlButton也是为了让读者知道CocosBuilder中能处理按键消息的节点除了CCMenuItemImage以外,还有CControlButton。
添加一个CCLabelTTF到根节点(即CCLayer节点)。
选择此节点,到CocosBuilder右侧的CCLabelTTF段更改“Font Size”字段为15。这里使用CCLabelTTF主要是教授如何在自定义的Layer类中声明一个CCLabelTTF*变量指向CocosBuilder界面中的CCLabelTTF节点。
界面布局如图。

界面的“皮”做完了,但界面的神经还没有接好。现在我们开始连接好界面的各个神经。
点击根节点(即CCLayer节点),在CocosBuilder右侧我们可以看到Code Connections段。我们将"XJLayer"填入其中的“Custom class”字段中。
XJ是本人名称缩写,你可以写成自己的名称缩写(但后续操作中XJ要替换成你的名称前缀了)。此操作的含义:让CocosBuilder在保存此节点时,将其节点标签保存为“XJLayer”,这样在文件解析的时候,当我们碰到节点标签是"XJLayer"时,我们就知道这是我们自定义的XJLayer节点,我们需要对这个节点做特殊处理。
点击”切换账号“节点(CCMenuItemImage节点),在CocosBuilder右侧CCMenuItem段中,将”menuSelectorChangeAccount"填入“Selector“字段。在”Target“字段中选择”Document root“。如下图:

看到这个,如果你编写过Cocos2d-x的CCMenuItem相关的代码,你应该很熟悉,这里的”Target“字段就是指的希望处理该消息事件的对象,这里是Document root,就是指的根节点,即我们的CCLayer节点(此节点Custom Class字段已经被我们改成”XJLayer“)。”Selector“字段就是处理消息事件的函数名称。
点击”Title“节点(CCControlButton节点),在CocosBuilder右侧CCControl段中,我们将”controlButtonTest“填入”Selector“字段,在”Target“字段中选择”Document root“。
两个字段含义想必你能猜到。这里值得注意的是下面的9个复选框,这里默认选中”Up inside“。这些复选框表示你感兴趣的消息。当前你只对按键在button中抬起事件感兴趣。即:当用户点击此按钮抬起时,你的”controlButtonTest“函数会被调用(controlButtonTes函数在哪呢,后面会提到)。
点击”Sample Test“节点,在CocosBuilder右侧"Code Connections"字段,更改”Don't assign“字段为”Doc root var“字段,并将"m_TestLabel"填入该字段。
这里是说,这个对象会被赋值给”文档根变量“,也就是根节点对象。赋给该对象的”m_TestLabel“成员变量。这里就是教授如何把CocosBuilder文件里的对象赋值给自定义类的某个成员变量,建立起Cocos2d-x和CocosBuilder的联系。
保存文件(【Command】+【s】,一定要保存文件哦,没有点击保存文件,更改不会被记录),然后发布(【Command】+【Option】+【S】)。
创建一个Cocos2d-x模版工程,起名叫做”ConnectToCustomLayer“。
从CocosBuilder创建的Project路径里面,将ccbResources文件夹(CCControlButton默认背景图片是在ccbResources文件夹下的),以及两张我提供的图片资源和一个”ConnectToCustomClass.ccbi“文件(不是ccb文件哦)拷贝到Cocos2d-x项目工程resources文件夹下,并全部添加到xCode项目的Resources下(注意,一定要添加到项目工程,这样加载ccbi文件时,CCB SDK才能找到ccbi文件。在添加的时候填出的提示框中,一定要选中对应目标项目即Target)。

在项目文件视图中,点击Classes,创建一个C++类【Command】+【N】。其名称叫做”XJLayer"。代码人如下:
点击左侧两个按钮,xCode调试输出窗口内会有我们事先写入的调试信息输出。断点调试,你会发现XJLayer类对象的m_TestLabel是有值的。这就证明m_TestLabel正确连接了”Sample Test“标签。