如何基于Cocos2d-x制作SLG游戏
在教程的第一部分,我将教你如何使用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类的一些方法来加载我们刚刚创建的映射文件。
希望能帮到你,请采纳。