使用cocos create 2.1.3版本。
打算动态获取图片二进制数据,然后动态创建texture2d和spriteframe显示图片。
调式看到dataview里的数据是有的,uint8array。运行时报:type UNSIGNED_BYTE but ArrayBufferView not Uint8Array or Uint8ClampedArray。代码如下:
怎么回事呢?断点调试在texture-2d.js的_setImage函数(glFmt,options的image为Null);
var oReq = new XMLHttpRequest();
oReq.open(“GET”,“http://localhost:7456/res/import/ed/ed81d4bc-6d27-4a1d-860e-ed4a66449852.png”,true);
oReq.responseType = “blob”;
oReq.onload = (oEvent)=>{
if(oReq.readyState === 4 && oReq.status === 200)
{
cc.log("111 == " + oEvent);
var blobdata = oReq.response as Blob;
var reader = new FileReader();
reader.addEventListener(“loadend”,()=>{
var result = reader.result as ArrayBuffer;
var texture = new cc.RenderTexture();
texture.initWithSize(823,492);
var dataView = new DataView(result,0,result.byteLength);
texture.initWithData(dataView,cc.Texture2D.PixelFormat.RGBA8888,823,492);
var spriteFrame = new cc.SpriteFrame(texture);
this.mapSprite.spriteFrame= null;
spriteFrame.setRect(cc.rect(0,0,823,942));
this.mapSprite.spriteFrame = spriteFrame;
});
reader.readAsArrayBuffer(blobdata);
}
};
oReq.send(null);