cocos2dx tiledmap 图片资源
在游戏开发中,场景是至关重要的组成部分。若缺少这一环节,便很难打造出优质的游戏。对于 Cocos2d-x 而言,有众多 2D 地图编辑器可供选择,且效果都较为理想。其中,Tiled 是支持度较好的一款,它支持多种编辑模式,例如正常模式、45 度地图模式等。
不同模式的适用场景
小型手机游戏
若要开发小型手机游戏,正常模式已足够,Cocos2d-x 对该模式的支持十分出色。
具有 3D 感的场景
若需要营造出 3D 感的场景,可以选用 45 度正常地图。
大场景
若要开发大型场景,例如 4000 * 4000 像素级别的地图,Tiled 可以使用交错(Staggered)模式。然而,Cocos2d-x 的封装并不支持该模式,需要对源代码进行改造。
这里就不详细阐述改造步骤了,有位达人已在博客中进行了详细介绍,以下是链接:
同时,再附上他的另一篇博客,内容是交错模式下的 A* 寻路算法代码:
需要注意的是,在实践过程中发现他的算法存在问题,未考虑 Cocos2d-x 的坐标系。下面附上我的实现代码,最后我会将封装好的代码分享到 CSDN 上。
CCPoint CCTMXLayer::positionForStaggeredAt(const CCPoint& pos)
{
CCPoint xy = CCPointMake((pos.x * m_tMapTileSize.width) + ((int)pos.y % 2) * m_tMapTileSize.width / 2,
(m_tLayerSize.height - (pos.y + 1)) * m_tMapTileSize.height / 2 - m_tMapTileSize.height / 2);
return xy;
}
个人心得
我原本自己编写了一个 A* 算法,但移植到 Cocos2d-x 后,发现角色移动不够平滑,而且交错模式的代码理解起来较为困难。我不太理解设计这种地图的人为何将坐标转换设计得如此复杂,使用起来体验不佳。
Cocos2d-x + Tiled 的缺陷
可能我对其使用还不够深入,若吐槽不当,还请大家谅解。
- 贴图模式不友好:对于正常的 90 度地图,贴图模式尚可接受;但对于 45 度地图,需要为每个 TILE 单独贴图,操作十分繁琐。以 4000 * 4000 的地图为例,需要进行大量的贴图操作,应该支持大块贴图功能。
- 支持图片数量受限:Cocos2d-x 对 Tiled 的支持存在局限,每一层仅支持一张图片。这是因为 TMXLayer 是使用 CCSpriteBatchNode 方式实现的。对于大地图而言,这种局限影响较大。例如,我的 4000 4000 地图若使用整图,当手机无法支持大于 2048 2048 的图片时,就会出现问题;若不使用整图而进行分层,每一层会产生大量的冗余 tile,导致内存占用增加一半,超过 100M。
目前成果
目前,已实现了场景阻挡、人物遮挡半透明以及 A* 寻路等功能。但我对当前的成果并不十分满意,后续有时间的话,可能会重写一个专用的 45 度地图编辑器。