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了
总结以上是内存溢出为你收集整理的让cocos2dx 支持Staggered格式的tmx全部内容,希望文章能够帮你解决让cocos2dx 支持Staggered格式的tmx所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)