Egret社区

[Egret Engine] 关于资源销毁后二次渲染的问题

2018-1-20 16:25
15573
产品 Egret Engine 版本 5.0.9
复现概率 100% 平台 Windows windows7
复现步骤 ①:加载一个图片A
②:new一个面板是 里面的eui.Image控件的source=A
③:不销毁此面板 , 使此面板的visible = false(或不等于都行)
④:销毁A资源 , RES.destoryRes
⑤:打开面板 , 重新加载图片A , 并赋值到eui.Image . 发现根本不显示
问题描述 当把销毁的资源如Image , 在没有销毁的控件如eui.Image再次赋值source时 , 对象资源图片不会显示
错误代码 在eui.js中存在二次赋值拦截
Object.defineProperty(Image.prototype, "source", {
/**
* The source used for the bitmap fill. the value can be
* a string or an instance of <code>egret.Texture</code>
*
* @version Egret 2.4
* @version eui 1.0
* @platform Web,Native
* @language en_US
*/
/**
* 用于位图填充的源。可以是一个字符串或者 <code>egret.Texture</code> 对象
*
* @version Egret 2.4
* @version eui 1.0
* @platform Web,Native
* @language zh_CN
*/
get: function () {
return this._source;
},
set: function (value) {
if (value == this._source) {
return;
}
this._source = value;
if (this.$stage) {
this.parseSource();
}
else {
this.sourceChanged = true;
this.invalidateProperties();
}
},
enumerable: true,
configurable: true
});
BUG截图
按道理来说 , 这个不算是什么Bug . 只要是销毁资源的时候 , 顺便将Image.source 设置为null(或者直接将控件销毁,后面要用直接new),这样避免了eui.js的二次赋值拦截问题 . 便可以轻松的解决问题 . 但是 , 有时候忘记了 , 这就是一个坑啊 , 能否在后面的版本中进行优化,解决掉 . 即优化实现后 :
当对Image.source赋值以后 ,  再对器资源销毁(RES.destoryRes)后,即使不对Image.source做 null (或者不删除eui.Image对象,下回重新new一个eui.Image) . 再次加载已经销毁的对象(一定要是同一个) , 然后Image.source赋值此资源以后 , 还会显示图片.

有的时候Game中会存在此类优化的问题.
分享到 :
0 人收藏

3 个回复

正序浏览
kieedi  登堂入室 | 2020-4-28 22:41:30
app小王子 发表于 2018-1-22 11:53
感谢您的反馈,我们已做记录。

请问这个有处理方案吗?现在版本都这么新了,还是没解决这个问题。
kieedi  登堂入室 | 2020-4-28 22:40:29
我给这个折腾了很久,请问有解决方案吗?因为页面管理的时候,上一个页面基本是静态的。销毁了资源后,重新下载,旧页面还是不会自动刷新显示图片出来
app小王子  社区管理员 | 2018-1-22 11:53:07
感谢您的反馈,我们已做记录。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|京网文[2014]0791-191号|京ICP证150115号|Egret社区 ( 京ICP备14025619号 )

Powered by Discuz! X3.4 © 2001-2019 Comsenz Inc.

返回顶部