知易游戏开发教程cocos2d-x移植版005(上)
游戏中的地图是整个游戏的虚拟场景。通常情况下,手机上的游戏地图按照画面滚动方向可以分为以下三类:
1)纵向滚动
常见的是打飞机类游戏,画面滚动主要是从上至下的模拟正在按照常规速度飞行的飞机。
2)横向滚动
ARPG类游戏,主角通过画面从左至右的滚动来探索未知的世界、消灭敌人、成功过关。例如魂斗罗、超级玛丽等等。
3)纵、横向滚动
RPG游戏中这种情况最为常见,主角的一个关键任务就是探索一片较大的未知领域:发现敌人、发现特殊位置地点、建筑物等。
无论哪种场景,都会涉及到以下问题:
1)移动位置控制:主角在地图中移动时必须考虑到地图中物体的阻碍,不能越过墙体,必须通过木桥过河。更加真实的模拟会要求主角在不同的地面上有不同的移动速度:土地上速度一般,冰面上会打滑,停止效果滞后等。
2)地图的动态变化:主角在游戏过程中的行为导致地图变化。这里所说的变化是永久的,比如摧毁敌方建筑,建立我方建筑,修建道路等。而像敌人尸体的腐烂消逝这种临时变化不在此列。
由此可见,游戏中地图编程最主要的功能就是:
1)如何展示一个较大的地图场景。
2)如何实现地图对游戏主角和敌人移动的限制:阻止移动、修改运动效果。
3)如何动态的改变局部地图的显示内容。
从本章开始,我们讲解cocos2d-x引擎提供的地图处理机制:CCTMXTiledMap类。
TMX是当前主要支持的地图格式,你可以使用Tiled Map Editor来生成这种格式的文件。
Tiled Map Editor分Qt版和Java版两个版本,本文使用Qt版进行讲解,知易原文使用Java版。至于更换版本的原因,参见我的前一篇文章《地图编辑器的选择1》。
基础知识
考虑到内存容量、运行效率以及图像显示限制等诸多因素,手机上的游戏多半采用一种叫做瓦片地图的机制。制作这种地图时,首先对要绘制的地图进行分析,将使用到的物件制作成尺寸一致的小图片,即“瓦片”,然后使用这些瓦片拼接出完整的地图。
例如下面这幅地图:
绘制这幅地图只使用了以下3个瓦片:
这样一来,使用很少的图像元素就可以表现一副大尺寸的地图,大大地减少了内存使用量,提高了游戏运行效率。
下面就以这幅地图为目标,逐步讲解Tiled Map Editor的基本使用方法。
实战演练
1)创建地图
选择菜单文件->新文件。
在弹出的新地图对话框中,选择地图方向为正常,地图大小为38 x 30,块大小为20 x 20,确定。
2)创建“瓦片”集
选择菜单地图->新图块。
在弹出的新图块对话框中,输入图块的名称“codes”(不要问我为什么起这么个名字,我也不知道,也许知易是随便起的吧),并选择“tileSet.PNG”作为图像的来源,确定。
这时,你就可以从窗口右下角的图块面板中看到它了。
3)创建图层
你可以通过图层面板的“添加图层”按钮来创建新图层。
本例中,我们直接使用系统创建的默认图层。双击图层列表里的“块层 1”,将其重命名为“tile”,回车。
4)绘制地图
在开始之前,检查一下显示网格的功能是否开启,它可以帮助我们精准地绘制地图。
此功能如未开启,你可以选择菜单视图->显示网格来开启它。
首先,选择填充工具,将整张地图填充为土地。
然后,选择图章刷工具,在地图上绘制砖墙。
Tiled Map Editor编辑器支持地图的复制、粘贴操作。所以可以对图案相同的部分复制、粘贴来加速地图的制作。
接着,点缀上几块钢板完成整张地图的绘制。
5)保存地图
忙活这么半天了,最后千万别忘了保存文件。选择菜单文件->保存,将TMX地图和用到的图片资源保存在同一个文件夹下。
ps.如果遇到生成的地图文件无法在cocos2d-x中使用的情况,请检查编辑器参数设置中的“另存为数据层”一项是否为Base64 (不压缩)、Base64 (gzip压缩)、Base64 (zlib压缩)之一。
绘制优质地图的几点建议
程序员们通常中规中矩,作品就显得死板而不生动。
本段翻译自下面的链接:
http://wiki.themanaworld.org/index.php/Mapping_Tutorial
- 在开始绘制之前你应当对整体布局有大致的规划,先从纸上画个草图,这将对你有所帮助。
- 避免将桥、山道、走廊之类的阻挡设置为1个瓦片的宽度,否则很容易卡在这些地方。
- 不要让太多相似的物件同屏出现。非常显眼的瓦片应当有节制地使用。不要让大片相同的瓦片反复出现,你可以通过点缀一些不一样的瓦片来断开它们。
- 避免将自然环境画得太规则。通常,树不会成排成列地生长。河流、山脊以及洞穴里的走廊从来都不是笔直的。
- 地图不能画的太功能化。给玩家们一些东西看,即便这对玩游戏没什么帮助。
- 但是,不要忘了可玩性。
稍作调整,感觉就好多了。
当然,这就要求我们在绘制地图时要多少有些“艺术细胞”。如果感觉自己没有这个水平,那就找帮手吧。你身边肯定会有的,比如那个看见你一回家就趴在电脑前面而很恼火的人。