如何基于Cocos2d-x制作SLG游戏

本教程将教你如何使用Cocos2d-x制作一个基于磁贴地图的游戏,当然还有磁贴地图编辑器。(我们小时候在小霸王小学玩的游戏大多是基于磁贴地图的游戏,比如坦克大战,冒险岛,吞噬天地等。)我们会创造一个小游戏,忍者在沙漠里找西瓜吃。

在教程的第一部分,我将教你如何使用Tile创建地图,如何在游戏中添加地图,如何使地图随着玩家滚动,以及如何使用对象层。

在教程的第二部分,我将介绍如何在地图中创建碰撞区域,如何使用tile属性,如何制作可以拾取的对象并动态修改地图,以及如何保证忍者不会吃太多!

如果你还没有准备好,你可能需要从如何用Cocos2d-x3.0制作一个简单游戏的系列教程开始,因为我们的教程用到了很多基本概念,从上面的教程中可以得到。

好了,我们来玩瓷砖地图吧!

创建工程框架

我们先创建整个项目的骨架,这样才能保证以后需要的文档都包含在内,可以运行。

首先,该项目被命名为TileGame。

接下来,下载游戏资源文件。该资源包包含以下内容:

玩家雪碧。这个图类似于如何用Cocos2d-x3.0做一个简单的游戏。

我用cxfr工具做的一些音效。

我用车库乐队做的一些背景音乐。(更多信息请看这篇博文)

我们将使用图块集合-它实际上将与图块地图编辑器一起使用,但我想把它放在这里,其余的将更容易。

一些额外的“特殊”瓷砖,我稍后会解释。

一旦您有了这些资源,解压缩它们并把它们拖到项目的“Resources”组下。(编者注:以上音频资源均已被编者转换为mp3格式)

如果一切顺利,所有文档都应该在您的项目中。是时候制作我们的地图了!

用瓷砖制作地图

Cocos2d-x支持由平铺地图编辑器创建的TMX格式的地图。(建议你安装的时候选择英文,本教程的磁贴是英文的。)

下载后直接双击运行。点击文件\新建,出现如下对话框:

在“方向”部分,您可以选择“正交”。我们还选择默认的Base64(zlib压缩)作为层格式。

接下来,设置地图的大小。请记住,这个大小是单位,而不是像素。我们将创建一个尽可能小的地图,所以选择50*50。

最后,指定每个单幅图块的宽度和高度。您在此处选择的宽度和高度应该基于您实际平铺图片的大小。本教程中使用的示例图块的大小为32*32,因此在上面的选项中选择32*32。

接下来,我们导入制作地图所需的图块集合。单击菜单栏上的“地图”菜单,“新建Tileset ...”,将出现以下窗口:

要获取图片,请单击“浏览...”按钮,然后导航到项目的Resources文件夹,选择tmw_desert_spacing.png文件(我们刚刚提取的),并将其添加到项目中。它会根据文件名自动填入名称。然后将新的图形快捷方式命名为“tmw_desert_spacing.png”。同时,将下面的磁贴间距和边距设置为1。

你可以保持宽度和高度为32*32,因为瓷砖的实际尺寸就这么多。至于边距和间距,我还没有找到好的文档解释如何设置这两个值。以下是我个人的看法:

边距是当前图块在计算自身像素时需要减去的像素数量(包括宽度和高度)。(word和css的边距)

间距是两个相邻图块之间的间隔(同时考虑宽度和高度)(类似于word和css间距)

如果你查看tmw_desert_spacing.png,你会看到每个图块都有一个像素的空白边框,这意味着我们需要将margin和spacing设置为1。

选择“确定”后,您将在“互动程序”窗口中看到一些互动程序。现在,你可以做一张地图了!在图块集小窗口中,选择一个图块,然后单击地图上的任意位置,您将看到所选图块出现在点中的位置。

所以,继续做地图吧——充分发挥你的聪明才智!确保在地图上添加至少一对建筑,因为我们稍后需要一些东西来做碰撞。

记住一些方便的快捷方式:

您可以在拼贴集选取器中拖动一个框,并一次选择多个拼贴。

您可以使用工具栏上的“桶填充工具”按钮(即一个桶)来绘制基于基准图块的整张地图。

您可以使用“查看\放大...”和“查看\缩小...”放大和缩小地图。

完成地图绘制后,双击图层选项卡上的图层(现在可以说是“Layer1”),将其重命名为“背景”。然后点击“File\Save”将文件保存到你项目的resource文件夹中,命名为“TileMap.tmx”。

我们以后会用这个tmx做一些有趣的事情。好了,我们把地图载入游戏吧!

将平铺贴图添加到Cocos2d-X的场景中。

打开HelloWorldScene.h,然后添加一些成员变量:

卡片打印处理机(Card Print Processor的缩写)

//用以下内容替换init方法

bool HelloWorld::init()

{

如果(!Layer::init())

{

返回false

}

STD::string file = " tile map . tmx ";

auto str = String::createWithContentsOfFile(file utils::getInstance()-& gt;fullPathForFilename(file.c_str())。c _ str());

_ tile map = TMXTiledMap::createWithXML(str-& gt;getCString()," ");

_ background = _ tile map-& gt;layerNamed("背景");

addChild(_tileMap,-1);

返回true

}

这里,我们调用TMXTiledMap类的一些方法来加载我们刚刚创建的映射文件。

希望能帮到你,请采纳。