版本:cocos2dx3.2
测试用机:三星note2
问题描述:如题,fast tilemap在某些Android机上,无法画出图层
问题原因分析与解决:
先引用一篇文章
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分钟
,初步看上去是没啥问题了
ps:
1.我这边只有这么一个机型出的问题,其他机型无法测试,也不知道会引发什么其他问题,求官方版的修改~
我的在模拟器上就跪了