本文翻译自:http://www.raywenderlich.com/23996/introduction-to-cocosbuilder
翻译:弹涂鱼
CocosBuilder与interface builder类似,是cocos2d下简单快速进行精灵,层,场景布局的工具。
CocosBuilder可以快速完美的进行菜单和交互场景的布局,如果手动去做,这往往让人头疼。
在CocosBuilder之前,通过cocs2d为游戏创建基本的接口确实很痛苦。当添加一个新的菜单或按钮到你的游戏时,你通常这样来做:
l
l
l
l
这个初级教程意在教会你使用CocosBuilder去创建简单界面,你将学会如何如何设置菜单,按钮,粒子系统,基础关卡布局,将界面与代码关联。
在这里我们将重新构建Cat Jump这个游戏,它最初由
我们来以简单的方式来构建一些界面。
Cat Jump简介
Cat Jump描述了一只猫的倒霉一天。当它走在路上思考工作时,突然所有的汽车,卡车,甚至是骑在自行车上的小孩子都朝它驶来。
下图是游戏中的一张预览图:
可怜的小猫只有9条命,你的目标是使你的小猫通过躲避障碍物来来活的尽可能时间长。
为了对我们要做的游戏有一个大致的了解,从这里下载没有使用过CocosBuilder的CatJump版本(链接我不加了)。运行并玩一会,挺有趣的。
玩了一会游戏,看了一遍代码,你会注意到有许多硬编码的偏移用于设置菜单,文本条,和精灵的位置。这确实很痛苦,不过接下来你将学会一种简单的方式。
开始教程前,通过以下步骤来重新构建项目:
l
l
l
l
l
最后,你将学习如何阻止或解决CocosBuilder中一些问题的技巧。使用CocosBuilder不易出错,不过我们仍然要避开一些障碍,有一点像骑三轮车的小孩子。你需要雷达去检测,以便节约我们的后续时间。
开始CocosBuilder
如果没准备好,那么先下载CocosBuilder,确保下载最新版本,写本文时使用的2.1版本,在下载界同时下载实例文件。
在开始使用CocosBuilder创建工程前为你的工程创建一个文件夹,在这里将存储游戏的资源文件(resources/assets)。
注意:你也可以创建一个资源文件夹的引用,这个文件夹可以在你硬盘的任意位置,但是我发现创建类似这样的文件夹结构可以让我知道所有我的文件所在同时保持合理组织。
在桌面创建一个文件夹CocosBuilderFiles,在此目录里创建两个子目录Resources和Scenes。
Resource文件夹包含游戏中用到的所有资源文件。如果你喜欢你可以从CatJump中拷贝所有资源文件,当然为了简单我把用到的资源打成zip包(链接原文中找),下载,解压,拷贝到资源文件夹。
打开CocosBuilderFiles在菜单中选择File\New\New Project,命名工程为CatJump并保存到CocosBuilderFiles目录。
现在工程已经创建,你会在CocosBuilder左侧滑动条中看到Resources和Scenes文件夹。当然还有一个CocosBuilder自动创建的一个文件夹ccbResources,在它旁边你会看到一个新的文件HelloCocosBuilder.ccb,双击看到里面的内容。
它是只包含了一个Label的基础布局,显示着Hello CocosBuilder
不用担心,你的Cat Jump界面也只比这难一点。
无需代码!
我们以创建CatJump的主场景开始,这个场景有三个按钮:
l
l
l
首先,你需要删除HelloCocosBuilder.ccb文件,它只是程序默认创建的场景。
注意:你可能觉得通过CocosBuilder工程去删除文件很直接,但我没能直接删除。我不得不采取关闭CocosBuilder,在Finder中删除HelloCocosBuilder.ccb。然后重新打开CocosBuilder。如果有人知道简单的方式,请在论坛中回帖。
接下来,选择File\New\New File,在下拉菜单中从菜单项中选择iPhone Landscape和iPhone 5 Landscape,另外确保根类型为CCLayer。
点击Create,命名文件为MainMenuScene,保存到Scenes文件夹。
此时工程面板看起来像这样:
这时你已经创建了你的第一个场景,那么我们来添加一些精灵吧。
点击工具条的CCSprite按钮。暗示:下图圆圈标出。
这将添加一个新的精灵到场景中。
选择新添加的精灵,使它的frame与Title_catjump.png绑定。在右侧的滑动条会显示出当前选中对象的属性。具体操作如下图:
通过拖拽使精灵剧中,或者在右侧滑动条中交Anchor Point的X,Y值设置为0。
注意到只有当位置设置为左下角时上述操作才会生效,当位置改变时,你不得不重新设置X,Y的位置。试试设置其他值的效果。
接下来我们为场景添加按钮。
点击下图中的CCControl按钮添加一个按钮到屏幕中。
新按钮有一个漂亮的背景,这张背景图可以在ccbResources文件夹找到。通过右侧滑动条将标题改为Play.
调整按钮位置,可以通过拖动或右侧滑动条设置属性来调整位置。重复上述操作添加两个按钮,一个为Option,一个为About。最终效果如下图
第一个场景布局完成了。
连接场景到类!
开始工作前先来进行一些调整。当你通过CocosBuider创建的CCLayer来设置场景时,如果你想使场景层为自定义类,你需要为CocosBuilder指明那个类。
例如,如果你用MainMenuScene初始化了一个场景并且你希望它的场景层是你自定义的类,你需要在CocosBuilder的代码连接区指明类名。
选中MainMenuScene.ccb,在TimeLine中CCLayer根节点。
在右侧代码连接区设置自定义类为MainMenuLayer,这样当你初始化场景时,CocosBuilder会寻找名叫MainMenuLayer的类去初始化场景层。接下来是要发布CocosBuilder界面文件,点南击File,选择Publish,这将在场景目录创建一个名字为MainMenuScene.ccbi的文件。
CocosBuilder介绍到这,接下来介绍如何在Cocos2D下工作。
编码时间!
首先确保你安装了最新的Cocos2D,写本文时是2.1版。
在Xcode里创建一个新的Cocos2D工程,并命名为CatJump,设置目标设备为Iphone:
创建工程并保存到硬盘。
接下来创建一个新的文件夹Scenes,将后缀为CCBI的文件拷贝到此文件夹,确保“Copy items to destination group’s folder (if needed)”为选中状态,另外CatJump Target也为选中状态。
现在需要添加CCBReader文件夹到你的工程中,确保“Copy items to destination group’s folder (if needed)”为选中状态。对CCControlExtension执行相同操作。
在CatJump下创建新目录Layers,创建一个新的类MainMenuLayer使它继承自CCLayer。在开始写代码前在AppDelegate.m文件中添加头文件:
#import “CCBReader.h”
另外将application: didFinishLaunchingWithOp
[director runWithScene: [IntroLayer scene]];
替换为:
[director runWithScene: [CCBReader sceneWithNodeGraphFromFi
上面就是你要运行由CocosBuilder创建的场景所需要的所有代码,CCBReader会解析MainMenuScene.ccbi并创建场景。
在运行这个程序前还需要最后一步,还记在CocosBUilder中添加到时场景中的背景图和来自ccbReource文件夹下的按钮图片吗?
所有这些文件还没有添加到你的工程中,你需要添加这些文件到你的工程,否则程序会崩溃。
将下图中的文件拷贝到你的工程,记住勾选Copy items to destination group’s folder (if needed)。
现在编译工程,如果在编译文件CCBReader.m时出现错误,用下面这行代码替换错误行。
运行程序,如果一切OK,你会看到:
主要事件!
恭喜,你以经有了一个通过CocosBuilder布局的场景,并且加载场景只需一行代码。但是,当用户点击按钮时你如何去捕捉事件。
事实上,CocosBuilder简化了这个过程。它可以指定当用户点击按钮时要调用的方法名,你也可以指定调用方法时所需要的触发事件(功过checkBox)。
我们来为MainMenuScene添加这个功能。打开MainMenuScene.ccb,选中Play按钮,在右侧面板的CCNode部分设置其Tag属性为1。接下来CCControl部分,在Selector对应的文本框中填写要被调用的方法名-- buttonPressed:。同时设置Target选项为
以同样的方式设置其他两个按钮,不同的是设置Options的Tag为2,About的Tag为3。
现在你已经为你的按钮绑定了事件,保存更改并发布,将发布的文件拷贝到Xcode。
接下来,打开MainMenuLayer.m
#import "CCControlButton.h"
#import "CCBReader.h"
同时在#import下添加以下宏定义
#define PLAY_BUTTON_TAG 1
#define OPTIONS_BUTTON_TAG 2
#define ABOUT_BUTTON_TAG 3
现在点击按钮程序会崩溃,因为其他场景还没有创建。下一步我们将去创建。
不选难的!
难度选择场景也有三个按钮,这里的三个按钮用于设置游戏难度,但是还要有一个返回按钮。创建一个场景命名为OptionsScene,保存到Scenes目录。
添加三个按钮分别为Easy,Medium和Hard,并设置其Tag分别为1,2,3。接着注册事件difficultyButtonPressed并设置目标为Document Root。
注意:什么是Document Root?它代表Time Line下的根节点。一会你会设置根节点为自定义类。这意味着OptionsLayer就是根节点。
布局如下:
现在添加返回按钮。这次我们用CCMenu的菜单项来代替CCControlButton来创建返回按钮。
单击工具条的CCMenu按钮:
将创建的CCMenu节点添加到OptionsScene Layer,现在点击CCMenuItemImage
按钮来添加 一个 CCMenuItemImage 按钮
就像你对MainMenuScene的操作,为OptionsScene添加自定义类。命名为
创建OptionsLayer,并在OpetionsLayer.m中
添加粒子—火焰!
点击工具条的CCParticleSystemQuad按钮
最终效果图如下:
同上,绑定自定义类。
最后介绍关于精灵的绑定,由于原文比较啰唆,这里我只给出绑定过程。
选中精灵:在右侧面板中找到
选中Doc root var,在文本框中输入对应精灵的变量名:
ok,关于CocosBuilder的使用就介绍到这。