一步一步CocosBuilder(1)

CocosBuilder是Cocos2d系列的配套开源工具,最新的版本是3.0a, 也是我们这个系列文章所采用的版本.
CCB(CocosBuilder简称)目前只有OS X版本, 没有Windows的版本, 而且源代码也是用Objective-c, 估计移植难度会比较大.
我想这个也是其不够流行的原因吧.

如果你是CCB的熟客,那么你一定会记得CCB v2.x以前版本附带的例子. 而CCB v3.0采用了一个叫做CocosDragonJS的例子, 主要是展示CCB的Javascript的调用能力.
我虽然很喜欢JS, 但是正在学习2d-x, 又很想学好, 所以还是打好基础, 学好原滋原味的2d-x才好, 以后换用无论是Html5, 还是JS, Lua, 心里才会觉得踏实.
我无论C++,还是2d-x都是新手,又是第一次想正儿八经的写博客文章, 难免有很多错误, 还望各位看客踊跃拍砖.

这次的目的是基本实现原来v2.0中的例子.
我采用的2d-x的版本是:cocos2d-2.1beta3-x-2.1.0, 以OS X版本为主, 以sample目录下的HelloCpp为基础改进. CCB的版本是v3.0alpha0.

本文的目标是基本实现将CCB整合进Mac OS X版本的项目中.

首先将2d-x源代码中sample目录下的HelloCpp目录重命名为TestCocosBuilder.并使用CocosBuilder创建新项目文件在其Resources文件夹中.
还需要将项目需要的图片资源放入Resources目录中. 具体可以参见我打包后的整体项目文件.还可以参见文末的目录树说明.

贴下Xcode项目的目录,如果添加extensions应该逐个添加,否则可能会遇到编译错误,有可能会把其他平台文件错误添加进来.

做完这些准备工作后, 我们接下来按步来讲解.

1.首先编辑下AppMacros.h, 修改以下代码

AppMacros.h
1
2
3
static Resource smallResource = { cocos2d::CCSizeMake(480, 320), "resources-iphone" };
static Resource mediumResource = { cocos2d::CCSizeMake(1024, 768), "resources-ipad" };
static Resource largeResource = { cocos2d::CCSizeMake(2048, 1536), "resources-ipadhd" };

这一段主要是修改HelloCpp默认的资源目录, 配合CCB的发布路径.同时可以将原来几个目录中文件分别移入对应目录.
2.添加一个新类MainScene如下

MainScene.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#ifndef __HelloCpp__MainScene__
#define __HelloCpp__MainScene__
#include "cocos2d.h"
#include "cocos-ext.h"
class MainScene
: public cocos2d::CCLayer //从CCLayer派生
{
public:
static cocos2d::CCScene* scene();
};
#endif /* defined(__HelloCpp__MainScene__) */

MainScene.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include "MainScene.h"
USING_NS_CC;
USING_NS_CC_EXT;
CCScene* MainScene::scene()
{
CCScene *scene = CCScene::create();
CCNodeLoaderLibrary *lib = CCNodeLoaderLibrary::newDefaultCCNodeLoaderLibrary(); //生成一个默认的Node Loader
CCBReader *reader = new CCBReader(lib); //用node load lib 初始化一个ccb reader
CCNode *node = reader->readNodeGraphFromFile("MainScene.ccbi", scene); //从ccbi文件中加载node
reader->release(); //注意手动释放内存
if (node!=NULL)
{
scene->addChild(node); //将node 添加到scene中
}
return scene;
}

3.修改AppDelegate.cpp中默认的启动scene

1
CCScene *pScene = MainScene::scene(); //HelloWorld::scene();

4.注意CCB中发布选项的设置, 并发布一次.

5.如果没有错误的话, 你应该可以看到运行的效果.

Update:
@王哲Walzer 说,CCB大部分是美术在用, 在美术圈讨论, 所以程序圈较少看到人在讨论, 其实用的公司挺多的.
http://weibo.com/1702027805/zay18wLT5

目录结构
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
├── samples #目录结构和2d-x源代码保持一致,相信大家对2d-x源代码很熟悉了.
│   └── CocosBuilderTest #项目所在目录
│   ├── Classes #代码所在目录
│   ├── Resources #资源目录
│   │   ├── ccb #ccb发布后的目录
│   │   │   ├── HelloCocosBuilder.ccbi
│   │   │   ├── ...
│   │   │   └── TestSprites.ccbi
│   │   ├── ccbResources #发布后的默认ccb资源
│   │   ├── fonts
│   │   ├── resources-ipad #注意这几个目录, 稍后我们会提及
│   │   ├── resources-ipadhd
│   │   ├── resources-iphone
│   │   ├── resources-iphonehd
│   ├── ccb-source #ccb项目目录
│   │   ├── ccb
│   │   │   ├── HelloCocosBuilder.ccb #这几个是原CocosBuilder例子中的ccb, 直接复制过来了.
│   │   │   ├── ...
│   │   │   └── TestSprites.ccbi
│   │   ├── ccbResources
│   │   ├── resources-auto #CocosBuilderv3.0的资源目录, 似乎只能存放图片
│   │   │   ├── btn-a-0.png #否则会引起发布是造成CocosBuilder崩溃
│   │   │   ├── ...
│   │   │   └── scale-9-demo.png
│   │   ├── MainScene.ccb #默认生成的ccb, 我们这一次不对其更改
│   │   ├── MainScene.js
│   │   ├── animated-grossini.plist
│   │   ├── animated-grossini.png
│   │   ├── ccb-source.ccbproj
│   │   ├── comic\ andy.ttf
│   │   ├── grossini-generic.plist
│   │   ├── grossini-generic.png
│   │   ├── markerfelt24shadow.fnt
│   │   └── markerfelt24shadow.png
│   └── proj.mac
│   ├── HelloCpp.xcodeproj #项目文件, 暂时只支持mac os x
├── cocos2dx #2d-x文件
├── extensions #2d-x的扩展
│   ├── CCBReader #这个是解析CocosBuilder的主要CCBReader
│   │   ├── CCBAnimationManager.cpp
│   │   ├── CCBAnimationManager.h
│   │   ├── ...
│   │   └── CCSpriteLoader.h
│   ├── GUI
│   ├── network
│   ├── physics_nodes
│   ├── ExtensionMacros.h
│   └── cocos-ext.h



代码打包下载:下载点

谢谢您耐心看完此文, 希望能对您有些帮助.如果有什么问题, 意见, 建议, 拍砖, 欢迎留言或者联系我.

新浪微博: @杨世玲 http://weibo.com/young40