至少3.4以上版本都有这个问题
因为引擎在加载RGBA8888纹理的时候会默认做透明通道预乘,TiledMap的TMXLayer渲染blendfunc设置的是ALPHA_NON_PREMULTIPLIED,如果用了RGBA8888纹理就会失真。
各位如果遇到这个问题只要改下TMXLayer的blendfunc。
另外非常强烈的希望引擎组能优化下FASTTMXLayer的渲染处理。现在layer在渲染前会生成大量的顶点缓存数据,其中很多无用的屏幕外数据和tileset为0的垃圾数据。我这里测试的2200*100格子的地图,1个图层会生成50MB的顶点数据。主要产生在updateTotalQuads,updateTiles,updateIndexBuffer,updatePrimitives这几个方法里。而gles2.0的缓存buffer有上限,导致一个图层的顶点数过多会有渲染丢失现象,地图大了只能分多个图层刷地表,导致内存消耗成倍增长。这样使得我们不得不把地图拆分成多个小地图编辑,非常不方便。
tiledmap的图像图层一直没有得到支持,tmx解析的代码异常的反人类,难以阅读,没有处理对象层对象的rotation属性以及在rotation属性存在时的坐标修正,部分float值在解析的时候被强转成了int。为了满足项目需求我用tinyxml2重写了解析部分,加上了部分缺失的处理。希望引擎组能重视下tiledmap模块,cocos2dx是2d起家,现在能支持的第三方2d地图编辑器就tiledmap1个了,发展3d的同时不能忘本。