直接从引擎的SimpleSpriteAssembler extends Assembler2D拷贝出来的代码,真机就不行,这是为啥?
拷贝cocos2d-jsb.js里面的代码也那样,uv直接相差半个屏幕
可以贴下代码
找到了,native的代码,下面第一段是sliced的Sprite 第二段是 SimpleSprite
void SlicedSprite2D::generateWorldVertices()
{
RenderData* data = _datas->getRenderData(0);
float* verts = (float*)data->getVertices();
auto floatsPerVert = _bytesPerVertex / sizeof(float);
for (auto row = 0; row < 4; ++row) {
float localRowY = _localData[row * 2 + 1];
for (auto col = 0; col < 4; ++col) {
float localColX = _localData[col * 2];
std::size_t worldIndex = (row * 4 + col) * floatsPerVert;
verts[worldIndex] = localColX ;
verts[worldIndex + 1] = localRowY;
}
}
}
cc.Assembler2D.prototype.updateWorldVerts = function (comp) {
var local = this._local;
var verts = this._renderData.vDatas[0];
var vl = local[0],
vr = local[2],
vb = local[1],
vt = local[3];
var floatsPerVert = this.floatsPerVert;
var vertexOffset = 0; // left bottom
verts[vertexOffset] = vl;
verts[vertexOffset + 1] = vb;
vertexOffset += floatsPerVert; // right bottom
verts[vertexOffset] = vr;
verts[vertexOffset + 1] = vb;
vertexOffset += floatsPerVert; // left top
verts[vertexOffset] = vl;
verts[vertexOffset + 1] = vt;
vertexOffset += floatsPerVert; // right top
verts[vertexOffset] = vr;
verts[vertexOffset + 1] = vt;
};