[LayaAir 2.0]通过绘制纹理生成的图片,改变scale时会出现图片不绘制的情况
demo项目里Main.ts下的onConfigLoaded方法里,使用Texture2D.setPixels创建了纹理,Sprite通过绘制纹理graphics.drawTexture的方式生成可视化图片,但这个Sprite在改变大小时会出现绘制失败的情况,demo里scale在0.7及更小的情况下就不再绘制,即图片不可见,具体代码如下:
let sp = new Laya.Sprite;
sp.size(nImageWidth, nImageHeight);
let b = new Laya.Texture2D(nImageWidth, nImageHeight);
b.setPixels(data);
sp.graphics.drawTexture(new Laya.Texture(b));
Laya.stage.addChild(sp);
let _picScale:number=1;
//每点一下就缩小0.05倍
Laya.stage.on(Laya.Event.MOUSE_DOWN,this,()=>{
_picScale-=0.05;
sp.scale(_picScale,_picScale);
//缩小到0.7倍时,图片就不见了
console.log("图片放大倍数:"+_picScale)
})
let sp = new Laya.Sprite;
sp.size(nImageWidth, nImageHeight);
let b = new Laya.Texture2D(nImageWidth, nImageHeight);
b.setPixels(data);
sp.graphics.drawTexture(new Laya.Texture(b));
Laya.stage.addChild(sp);
let _picScale:number=1;
//每点一下就缩小0.05倍
Laya.stage.on(Laya.Event.MOUSE_DOWN,this,()=>{
_picScale-=0.05;
sp.scale(_picScale,_picScale);
//缩小到0.7倍时,图片就不见了
console.log("图片放大倍数:"+_picScale)
})
没有找到相关结果
已邀请:
1 个回复
kylin9718
赞同来自: 180*****056
gl.texParameteri(this._glTextureType, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_LINEAR);
2) 但你使用 setPixels 时,并没有显式的设置mipmap层级 (setPixels的第二个参数)
3) 所以当缩放到.7左右时,读取第二层级的图片,但因为你没有设置mipmap层级,导致其他层级全是黑色,结果就显示黑色了。
4.1) 建议不要使用 setPixels 方法,或者手动设置mipmap层级。
4.2) 或者手动改我们的引擎,将
gl.texParameteri(this._glTextureType, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_LINEAR);
改为
gl.texParameteri(this._glTextureType, gl.TEXTURE_MIN_FILTER, gl.LINEAR);