lufy's legend

标题: 关于LLoadManage.load的onComplete重复调用的bug [打印本页]

作者: yorhomwang    时间: 2015-4-18 20:26
标题: 关于LLoadManage.load的onComplete重复调用的bug
本帖最后由 yorhomwang 于 2015-4-18 20:26 编辑

这个问题不好发现,所以可能报告bug的人少。不过我倒是遇到了。发现这个问题是我在新游戏中加入音乐时发现的,问题表现为,载入音乐后,进入战场,只有玩家的图片显示出来,而主公和敌军的图片无法显示,音乐正常播放。如下图:
1.png
按理说应该是这样:
2.png
我觉得这个问题是因为加载时,储存LLoadManage.load传给的onComplete result参数的datalist被篡改造成的。于是我调试到onComplete回调中,惊奇地发现这个回调尽然被反复调用。

从开始到出现这个界面,音乐共有三个,分批三批加载,分别对应三个场景A,B,C。我接着做实验,发现如果不加载A,B两个场景中的音乐,或不加载其中之一,就没有以上的问题。

从以上的线索来看,我无法判断问题的所在,于是我就从onComplete入手,在这个函数里用console.log输出调用次数。加载到同一场景时,正常的时候是:
3.png
出错的时候是:
4.png
很明显,onComplete被多次调用了。

求解,这个问题是怎么造成的??
作者: yorhomwang    时间: 2015-4-18 21:17
问题补充:以上游戏中的问题并不是100%会发生,有时候这个问题不会出现,但是再次刷新后,问题又出现了。出错时控制台输出不一定是0到8,有时会是0到7。有时候输出是0到8,也不会出现问题
作者: yorhomwang    时间: 2015-4-18 21:37
还发现一个问题:如果不调用play函数,问题同样不会发生
作者: yorhomwang    时间: 2015-4-18 21:51
我把引擎里的s.data.play()一行注释了,问题也消失了
不过onComplete重复调用的问题仍存在
作者: lufy    时间: 2015-4-18 23:32
yorhomwang 发表于 2015-4-18 21:51
我把引擎里的s.data.play()一行注释了,问题也消失了
不过onComplete重复调用的问题仍存在 ...

试试把这个文件加到你的游戏里覆盖引擎中的LLoadManager类,看看能不能解决你的问题

LLoadManage.js

10.02 KB, 下载次数: 11722


作者: yorhomwang    时间: 2015-4-19 00:10
lufy 发表于 2015-4-18 23:32
试试把这个文件加到你的游戏里覆盖引擎中的LLoadManager类,看看能不能解决你的问题
...

恩,问题像是解决了,刷新了10次,没有一次出现问题。
能告诉我究竟是哪里出了问题吗?
作者: lufy    时间: 2015-4-19 00:20
yorhomwang 发表于 2015-4-19 00:10
恩,问题像是解决了,刷新了10次,没有一次出现问题。
能告诉我究竟是哪里出了问题吗? ...

基本上和你想的差不多,就是多次读取后互相有一些影响
我改了之后,每次读取都是独立的,没有相互影响了
这个修改会加入到下个版本中,目前,你就这样先用这个附件覆盖一下吧
作者: yorhomwang    时间: 2015-4-19 01:05
lufy 发表于 2015-4-19 00:20
基本上和你想的差不多,就是多次读取后互相有一些影响
我改了之后,每次读取都是独立的,没有相互影响了
...

我还有一个疑问:为什么加入音乐后这个问题才表现出来?没加之前是完全正常的
作者: lufy    时间: 2015-4-19 09:11
yorhomwang 发表于 2015-4-19 01:05
我还有一个疑问:为什么加入音乐后这个问题才表现出来?没加之前是完全正常的 ...

LLoadManager如果不同时使用的话,这个问题应该不会出现
一旦同时使用,里面的数组长度发生变化,而每次读取完成都是在同一个LLoadManager对象中判断,自然就会发生冲突了
其实,只要使用上注意一些也可以避免这个问题
下个版本中改一下,也是为了避免同样这么使用的人遇到同样的问题,因为这么用确实也属正常




欢迎光临 lufy's legend (http://lufylegend.com/forum/) Powered by Discuz! X2.5