让cocos2dx 支持Staggered格式的tmx

前端之家收集整理的这篇文章主要介绍了让cocos2dx 支持Staggered格式的tmx前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

让cocos2dx 支持Staggered格式的tmx

分类cocos2dx 2581人阅读 评论(6) 收藏 举报

tiled支持创建Staggered格式的地图而cocos2dx本身是不支持此种格式的显示的,所以我们就改动cocos2dx小小的代码来实现支持代码很简单,而且未动着主体框架的代码,只是tilemap_parallax_nodes目录下的简单修改


首先在CCTMXTiledMap.h文件中定义枚举类型:

/**PossibleorientationsoftheTMXmap*/
enum
{
/**Orthogonalorientation*/
CCTMXOrientationOrtho,/**Hexagonalorientation*/
CCTMXOrientationHex,/**Isometricorientation*/
CCTMXOrientationIso,/**Hexagonalorientation*/
	CCTMXOrientationStaggered,//此处我加入了Staggered格式来支持,因为以后的解析需要用到
};

然后使用CCTMXOrientationIso作为关键字搜索需要用到枚举的地方,我们可以看到有如下一些:


很多地方的都是case,那么仿造一个就行了,

如:

intCCTMXLayer::vertexZForPos(constCCPoint&pos)
{
intret=0;
unsignedintmaxVal=0;
if(m_bUseAutomaticVertexZ)
{
switch(m_uLayerOrientation)
{
		caseCCTMXOrientationStaggered:
caseCCTMXOrientationIso:
maxVal=(unsignedint)(m_tLayerSize.width+m_tLayerSize.height);
ret=(int)(-(maxVal-(pos.x+pos.y)));
break;
caseCCTMXOrientationOrtho:
ret=(int)(-(m_tLayerSize.height-pos.y));
break;
caseCCTMXOrientationHex:
CCAssert(0,"TMXHexazOrdernotsupported");
break;
default:
"TMXinvalidvalue");
break;
}
}
else
{
ret=m_nVertexZvalue;
}

returnret;
}

最关键的是CCTMXLayer.cpp文件

positionAt
函数,此函数负责绘制Staggered格式的地图
CCPointpositionAt(constCCPoint&pos)
{
CCPointret=CCPointZero;
switch(m_uLayerOrientation)
{
	caseCCTMXOrientationStaggered:
			ret=positionForStagAt(pos);
			break;

caseCCTMXOrientationOrtho:
ret=positionForOrthoAt(pos);
break;
caseCCTMXOrientationIso:
ret=positionForIsoAt(pos);
break;
caseCCTMXOrientationHex:
ret=positionForHexAt(pos);
break;
}
ret=CC_POINT_PIXELS_TO_POINTS(ret);
returnret;
}
实现的函数如下:
positionForStagAt(constCCPoint&pos)
{
	CCPointxy=CCPointMake(((pos.x*m_tMapTileSize.width)+m_tMapTileSize.width/2)+((int)pos.y&1)*m_tMapTileSize.width/2,(pos.y+1)*m_tMapTileSize.height/2);
	returnxy;
}


最终效果如下:



由此我们就可以使用CCTMXTiledMap来处理45度Staggered格式的tmx了

猜你在找的Cocos2d-x相关文章