lufy's legend

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 8392|回复: 8
打印 上一主题 下一主题

关于LLoadManage.load的onComplete重复调用的bug

[复制链接]

46

主题

3

好友

1866

积分

偏将军

Rank: 4

跳转到指定楼层
楼主
发表于 2015-4-18 20:26:19 |只看该作者 |倒序浏览
本帖最后由 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被多次调用了。

求解,这个问题是怎么造成的??
回复

使用道具 举报

46

主题

3

好友

1866

积分

偏将军

Rank: 4

沙发
发表于 2015-4-18 21:17:11 |只看该作者
问题补充:以上游戏中的问题并不是100%会发生,有时候这个问题不会出现,但是再次刷新后,问题又出现了。出错时控制台输出不一定是0到8,有时会是0到7。有时候输出是0到8,也不会出现问题
回复

使用道具 举报

46

主题

3

好友

1866

积分

偏将军

Rank: 4

板凳
发表于 2015-4-18 21:37:20 |只看该作者
还发现一个问题:如果不调用play函数,问题同样不会发生
回复

使用道具 举报

46

主题

3

好友

1866

积分

偏将军

Rank: 4

地板
发表于 2015-4-18 21:51:32 |只看该作者
我把引擎里的s.data.play()一行注释了,问题也消失了
不过onComplete重复调用的问题仍存在
回复

使用道具 举报

37

主题

8

好友

9313

积分

诸侯王

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

5#
发表于 2015-4-18 23:32:20 |只看该作者
yorhomwang 发表于 2015-4-18 21:51
我把引擎里的s.data.play()一行注释了,问题也消失了
不过onComplete重复调用的问题仍存在 ...

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

LLoadManage.js

10.02 KB, 下载次数: 11717

不回答与技术和引擎不相关的问题
回复

使用道具 举报

46

主题

3

好友

1866

积分

偏将军

Rank: 4

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

恩,问题像是解决了,刷新了10次,没有一次出现问题。
能告诉我究竟是哪里出了问题吗?
回复

使用道具 举报

37

主题

8

好友

9313

积分

诸侯王

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

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

基本上和你想的差不多,就是多次读取后互相有一些影响
我改了之后,每次读取都是独立的,没有相互影响了
这个修改会加入到下个版本中,目前,你就这样先用这个附件覆盖一下吧
不回答与技术和引擎不相关的问题
回复

使用道具 举报

46

主题

3

好友

1866

积分

偏将军

Rank: 4

8#
发表于 2015-4-19 01:05:41 |只看该作者
lufy 发表于 2015-4-19 00:20
基本上和你想的差不多,就是多次读取后互相有一些影响
我改了之后,每次读取都是独立的,没有相互影响了
...

我还有一个疑问:为什么加入音乐后这个问题才表现出来?没加之前是完全正常的
回复

使用道具 举报

37

主题

8

好友

9313

积分

诸侯王

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

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

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

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

防止垃圾广告,请填写任意字符

Archiver|lufy's legend

GMT+8, 2024-5-9 04:04 , Processed in 0.055885 second(s), 23 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部