shiyang 请引擎开发人员不要在用这种写法了,我改你们的bug快改不过来了,每次升级版本我都要改一遍,太麻烦了,这次写出来希望官方的人能改一下,这里就举一个例子,引擎里面大量这种写法,尤其是ui库。不要问我要demo,这种一眼就能看出问题,handler执行之前destroy必出问题
陆仁毅 let img = new Laya.Image(); img.skin = "image.png"; img.destroy();我这样去使用并没有出现报错,虽然可能不是你的使用情况,但是我这段代码是符合你的简单问题描述的。所以最好你自己提供一个demo。还有关于希望官方改问题的话,你至少得把问题暴露出来。
shiyang 陆仁毅 不是怪你们没修,是每次更新版本,我都得自己修一遍太麻烦了,所以直接把问题告诉你们,看你们能不能修一下,这种问题完全不需要demo,你想一想,我要是资源没加载完成就destroy了,你的handler是不是没回收,然后资源加载好了,handler就会被触发,这个时候组件都是销毁状态了再执行handler里面的逻辑 是不是就报错了,这种问题我也是通过微信后台报错一步一步排查出来的,至于你说的没有复现,那就说明,你这个图片在destroy之前就已经加载好了,改法就是把handler用变量保存,destroy的时候直接把handler回收就好了
陆仁毅 陆仁毅 你可以自己试试这一段代码,看destroy先执行还是handler先执行。而且如果先执行了destroy,image里也是有对destroy的保护的,可能是你其他的代码触发了相关bug。
shiyang 陆仁毅 laya.ui.js:3741 Uncaught TypeError: Cannot set property 'skin' of null at ProgressBar._skinLoaded (laya.ui.js:3741) at EventHandler.runWith (laya.core.js:998) at ResInfo.event (laya.core.js:1039) at LoaderManager._endLoad (laya.core.js:19366) at Loader.onLoaded (laya.core.js:19335) at EventHandler.runWith (laya.core.js:998) at Loader.event (laya.core.js:1039) at Loader.endLoad (laya.core.js:18943) at Function.checkNext (laya.core.js:18926) at Loader.complete (laya.core.js:18919)
layabox 首先说明一下,这个写法是没有问题的,在保障加载完成之前,不要去destroy,这是一个大家惯用的开发潜规则,和逻辑顺序。 当然,还是要感谢你的反馈,在写法不变的情况下,从引擎底层,的确也可以加以保护,这个我们在后续的版本会保护一下。
shiyang layabox 这个写法是没问题,但是不安全,你说的在加载之前确保不destroy这个并不能保证,举个例子,我有个界面要加载很多用户的头像,我不可能等待这写头像加载完了才能关闭这个界面,所以把handler用变量来保存起来,destroy的时候回收一下,什么问题都没了