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

【cocos2dx-3.0beta-制作flappybird】就这么开始--开发环境的搭建素材的准备

2014-03-13 11:24 489 查看
从这一节开始,笔者将为大家讲解如何制作一款类似flappy bird的游戏。

一、磨刀不误砍柴工,首先我们来介绍一下游戏开发环境,以及游戏引擎的选择:

◆开发语言:C++
◆开发环境:VS2012  下载地址:
◆游戏引擎:cocos2dx-3.0beta2 下载地址为:http://cdn.cocos2d-x.org/cocos2d-x-3.0beta2.zip
在这里,笔者假设你已经可以很顺利的把VS2012跑起来了,因此我们仅简单地介绍一下如何用cocos2dx-3.0自带的脚本工具创建一个cocos2dx工程:

1、cocos2dx-3.0自带的项目生成工具都为python脚本,所以在你的本地机子上需要先安装python,并且python添加到环境变量当中,关于python的详细安装步骤由于篇幅限制,这里就不多加讨论了= =
2、回过头来,我们把之前下载的cocos2dx-3.0解压到某处,这里假设是解压到C:\Program Files下面吧。
3、接下来从cmd进入到C:\Program Files\cocos2d-x-3.0beta2\tools\project-creator\ 目录
4、在该目录下面将会看到一个项目创建的脚本工具,亦即create_project.py
5、运行create_project.py脚本(确保你已经成功安装了python运行环境),

●这里提供了两种方式:

1)如果运行这个脚本时没有带任何参数的话,将会弹出一个项目创建的对话框,如下图时所



2)当然也可以通过带参数的方式,直接在命令行中创建,详细的参数可以通过  create_project.py -h 查询学习

-n:名称
-k:包名
-l :编程语言
-p:项目存储路径

这里就举一个简单的例子:
create_project.py -n Earlybird -k com.earlybird.oiteboys -l cpp -p e:\git\cocos2dx
###begin copy engine
waitting copy cocos2d ...
cocos2d : Done!
proj.ios_mac : Done!
proj.android : Done!
proj.win32 : Done!
proj.linux : Done!
###New project has been created in this path:
e:/git/cocos2dx/Earlybird
Have Fun!
--------------------------------------

二、熟悉游戏中的元素:

1、主角:小鸟(这个游戏中有三只不同颜色的小鸟,每次游戏开始随机选择一只小鸟)



注意,上面三张图片只代表一只小鸟的三种不同状态。是的,把这三张图片做成帧动画,我们就可以看到一只小鸟在不断挥动翅膀穿过水管的样子了= =
那么,还有两只小鸟的图片也是类似的:





2、障碍物:水管 (水管有上下两根组成一组,棕色的水管表示已经通过的水管)



3、游戏背景(包括白天和黑夜两个背景,以及地面):





4、游戏中的分数(游戏中的分数是通过把数字拆分,然后显示数字的每一位):



5、游戏开始和结束



也许你已经发现,这里的每一张图片都像是从一张大图里面截图出来的,而不是一张一张单独的图片。是的,在游戏制作的过程当中,我们通常把所有用到的图片打包放在一张大图里面,这样在游戏开始的时候只需要一次性加载一张图片就可以了。

三、素材读取类的设计:

那么,问题来了:在游戏制作的过程当中,我们如何从一张大图里获取具体的某一个资源呢?
事实上,通常我们在打包游戏资源(atlas.png)的过程当中,除了将图片打包,还会生成一个对应的文件(atlas.txt),这个文件详细的记录了各个资源的名称、尺寸和在整个图片中的坐标,其大致格式如下所示:
名称       宽    高   开始坐标                       结束坐标
bird0_1 /48 /48 /0.0546875 0.9472656 /0.046875 0.046875
有了这个文件,我们就可以很方便地从大图中获取资源了。

为了规范起见,我们设计了一个AtlasLoader类,用来专门处理图片资源的获取。我们把这个类设计成全局共享,亦即在全局中只有一个该类的对象。
Atlas结构体存储从文件中读取的每一行的信息
typedef struct _atlas{
char name[255];
int width;
int height;
Point start;
Point end;
} Atlas;


载入图片资源:
void AtlasLoader::loadAtlas(string filename){
auto textureAtlas = Director::getInstance()->getTextureCache()->addImage("atlas.png");
this->loadAtlas(filename, textureAtlas);
}


在载入资源文件以后,我们通过atlas.txt 文件所标志的信息,把资源从大图里面一个一个拆分出来,放在一个Map<std::string, SpriteFrame*> _spriteFrames;中,这样在之后当我们需要使用某一资源的时候,就可以直接从这个Map中获取即可。
void AtlasLoader::loadAtlas(string filename, Texture2D *texture) {
string data = FileUtils::getInstance()->getStringFromFile(filename);
unsigned pos;
Atlas atlas;
pos = data.find_first_of("\n");
string line = data.substr(0, pos);
data = data.substr(pos + 1);
while(line != ""){
sscanf(line.c_str(), "%s %d %d %f %f %f %f %f",
atlas.name, &atlas.width, &atlas.height, &atlas.start.x,
&atlas.start.y, &atlas.end.x, &atlas.end.y);
atlas.start.x = 1024*atlas.start.x;
atlas.start.y = 1024*atlas.start.y;
atlas.end.x = 1024*atlas.end.x;
atlas.end.y = 1024*atlas.end.y;
pos = data.find_first_of("\n");
line = data.substr(0, pos);
data = data.substr(pos + 1);
Rect rect = Rect(atlas.start.x, atlas.start.y, atlas.width, atlas.height);
auto frame = SpriteFrame::createWithTexture(texture, rect);
this->_spriteFrames.insert(string(atlas.name), frame);
}
}


四、小结:

好了,这一节当中,我们介绍了游戏中所要用到的一些素材,并且讲解了如何在游戏制作的过程当中获取这些资源。在之后的文章当中,将会介绍如何让这些素材我为们所用,展现丰富多彩的游戏世界。

五、相关知识点:

1、设计模式(单例模式)
2、纹理
有关详细代码,请移步到github https://github.com/OiteBoys/Earlybird
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  cocos2dx flappybird 游戏