让cocos2dx 支持Staggered格式的tmx

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

让cocos2dx 支持Staggered格式的tmx

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

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


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

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

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


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

如:

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

@H_403_31@returnret;
}

最关键的是CCTMXLayer.cpp文件

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

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


最终效果如下:



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

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