让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了

相关文章

    本文实践自 RayWenderlich、Ali Hafizji 的文章《...
Cocos-code-ide使用入门学习地点:杭州滨江邮箱:appdevzw@1...
第一次開始用手游引擎挺激动!!!进入正题。下载资源1:从C...
    Cocos2d-x是一款强大的基于OpenGLES的跨平台游戏开发...
1.  来源 QuickV3sample项目中的2048样例游戏,以及最近《...
   Cocos2d-x3.x已经支持使用CMake来进行构建了,这里尝试...