-
问题背景:
项目中,需要频繁创建以及销毁texture2D,所以想模仿节点池的思路,做复用,但发现texture2D二次赋值后,在屏幕上无法显示出来 -
示例代码
新建空场景,在场景中增加node,加载Sprite组件和UITransform组件
export class test extends Component {_sp : Sprite = null; // 在场景中创建一个空的Sprite与其绑定
_tag: number = 0;
_texture:Texture2D = null;
start () {
this.node.on(Node.EventType.TOUCH_END, this.loadPic, this)
}
loadPic () {
if (this._tag == 0){ assetManager.loadRemote("http://xxxx.jpg", (err, asset) => { if (!err) this.setImage(asset) }) } else{ this.clearImage() }
}
setImage(asset){
if(this._texture == null){ this._texture = new Texture2D() this._texture.image = asset } else { this._texture.image = asset } let spf: SpriteFrame = new SpriteFrame() spf.texture = this._texture spf.packable = false // 这行代码很重要,没有这行代码,引擎会自动合图,自动合图的时候会new Texture2D() this._sp.spriteFrame = spf this._sp.node.parent = this.node
}
clearImage(){
this._texture.mipmaps = [] this._sp.spriteFrame.destroy() this._sp.spriteFrame = null this._sp.node.removeFromParent() // 这里不用destroy是为了复用Sprite
}
}
现象就是,第一次点击场景,有图片,第二次点击图片消失,第三次点击应该有图片,但是没有。
在浏览器调试了引擎代码,发现texture.image赋值的时候,reset调用了,_assignImage也调用了,渲染的时候,该组装的数据也组装了,底层gl.texSubImage2D也调用了,现在求问引擎组大佬,这是为啥?
- Creator 版本: 3.4.2
- 目标平台: 谷歌浏览器
- 首个报错: 没有报错
- 编辑器操作系统: windows 10 64位
- 重现概率: 必现