Cocos2d-x 游戏实例教程《跑跑跑》5:添加障碍物,Tiled障碍层的使用
当游戏主角能够在屏幕上自由奔跑时,为了让游戏更具趣味性和挑战性,我们需要为主角增加一些难度。接下来,我们将利用 TiledMap 在原有的地图上添加障碍物。
1. 使用 TiledMap 添加障碍物
1.1 创建新图层
首先,在 TiledMap 中新建两个图层,分别命名为 barrier 和 meta2。
1.2 绘制障碍物
选中 barrier 图层,利用图块中的素材在地图上绘制障碍物。绘制完成后,地图上那些集中的图形就是我们所说的障碍物。
1.3 验证障碍物效果
此时,如果保存地图并重新运行项目,会发现这些障碍物并不能阻碍主角前进。这是因为我们还没有对障碍物进行有效的碰撞处理。
1.4 配置 meta2 图层
为了实现碰撞检测,我们需要使用 meta2 图层。具体操作如下:
- 加载特定的图块(命名为
meta2)。 - 右键点击红色方块,选择“图块属性”,在属性中添加
Colliadable属性,并将其值设置为true。这一步的作用是标记该图块为可碰撞的。 - 选中
meta2对象层,使用meta2图块中的红色方块覆盖之前在barrier图层添加的障碍物。 - 完成上述操作后,保存地图。
2. 修改代码实现碰撞检测
2.1 关于 meta2 图层
meta2 就是我们刚刚在 TiledMap 中创建的对象层。在代码中,我们需要对其进行相应的处理。
2.2 tileCoordForPosition() 函数
tileCoordForPosition() 函数的作用是将 Cocos2d 中的坐标转换为 TiledMap 中的格子坐标。在进行碰撞检测时,这个转换是非常必要的,因为 TiledMap 是以格子为单位进行管理的。
2.3 在 setTiledMap 方法中处理 meta2 图层
在 setTiledMap 方法中,我们需要获取 meta2 对象层,并将其设置为不可见(即隐藏红色方块)。这样做的目的是在游戏运行时不显示用于碰撞检测的标记图块,只让它们在后台发挥作用。
2.4 修改 setTagPosition 函数
接下来,我们需要修改 setTagPosition 函数,以判断主角前方是否可通行。通过该函数,我们可以根据 meta2 图层中标记的可碰撞图块,来决定主角是否能够继续前进。具体的代码实现会根据项目的实际情况有所不同,但基本思路是通过获取主角当前位置对应的 TiledMap 格子坐标,检查该格子在 meta2 图层中是否标记为可碰撞,如果是,则阻止主角前进。
通过以上步骤,我们就可以在 Cocos2d-x 游戏中利用 TiledMap 的障碍层为游戏添加障碍物,并实现碰撞检测,让游戏更加有趣和富有挑战性。