Fast tilemap在某些Android机上画不出地图的bug

版本:cocos2dx3.2

测试用机:三星note2

问题描述:如题,fast tilemap在某些Android机上,无法画出图层:6:

问题原因分析与解决::14:
先引用一篇文章
http://blog.csdn.net/zhucde/article/details/3547442
文中提到

— Begin quote from ____

说的都是废话,大家应该知道, 我要说的是, 这里要注意第三个参数, GL_UNSIGNED_INT在OpenGL ES下已经不支持了, 现在只支持: GL_UNSIGNED_BYTE, GL_UNSIGNED_SHORT这两个参数, 我想不用说也知道,INT点4个字节, BYTE占一个,SHORT占两个, 能省就省吧,

— End quote

这句话很让我在意,然后就去尝试

在cocos/2d/CCFastTMXLayer.cpp中

void TMXLayer::onDraw(int offset, int count)
{
    ……
    glDrawElements(GL_TRIANGLES, (GLsizei)count * 6, GL_UNSIGNED_SHORT, (GLvoid*)(offset * 6 * sizeof(short)));
    ……
}

将原来的GL_UNSIGNED_INT改成GL_UNSIGNED_SHORT,将sizeof(int)改成sizeof(short)
图层真就画出来了,不过这么改肯定不对

经过一番研究,将CCFastTMXLayer.h中

    std::vector<short> _indices;

改成std::vector _indices改成 std::vector _indices
再搜索之,将相关内容中的int改成short,全在CCFastTMXLayer.cpp中,如下

void TMXLayer::updateIndexBuffer()
{
    ……
    glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(short) * _indices.size(), &_indices, GL_DYNAMIC_DRAW);
    ……
}
void TMXLayer::updateTotalQuads()
{
    if(_quadsDirty)
    {
        ……
        _indices.resize(6 * short(_layerSize.width * _layerSize.height));
        ……
    }
    ……
}

改完收工。
机子比较慢,运行了5分钟:12: ,初步看上去是没啥问题了:14:

ps:
1.我这边只有这么一个机型出的问题,其他机型无法测试,也不知道会引发什么其他问题,求官方版的修改~

困扰了我好多天的问题。。。谢谢楼主!

:12:我的在模拟器上就跪了

还是一起期待一下官方的修复吧