[]【音效BUG】在游戏失焦后再次返回游戏导致音效播放异常的问题与解决方案
复现方法:
1.用Laya.SoundManager.playMusic()随意播放一个音效文件
2.在项目内开启Laya.SoundManager.autoStopMusic = true; //通过窗口失焦静音键让音频自动跟随设备静音
3.使游戏失焦:
这时背景音和音效都会暂停,Laya.SoundManager.musicMuted不知道有没有被设置为false,但是关键解决办法在这个值上面;
4.在失焦的前提下用Laya.SoundManager.playMusic()播放另一个背景音乐:
5.返回游戏使游戏再次获得焦点:
游戏音效不再出现,不管怎么放都不会生效。
解决方案:
1.保持 Laya.SoundManager.autoStopMusic = false; 为false:
此处我们自己来管理音效是否因为失焦而自动暂停,监听游戏失焦事件:Laya.stage.on(Laya.Event.BLUR,this,this.method);
在失焦的回调里设置:
Laya.SoundManager.musicMuted = true;
Laya.SoundManager.stopMusic();
将正在播放的音乐路径存为成员变量;
2.监听游戏获取焦点事件:
监听游戏获得焦点事件:Laya.stage.on(Laya.Event.FOCUS,this,this.method);
在获取焦点的事件里设置:
Laya.SoundManager.musicMuted = false;
将之前存好的正在播放的音乐的成员变量用Laya.SoundManager.playMusic(this.playingBGM)继续播放;
3.问题解决
总结:
目前还不知道是不是因为SoundManager内的aotuStopMusic导致的问题,不过可以证明的是如果项目在失焦的状态下并且aotuStopMusic已经被设置过true的前提下,在失焦状态下切换音乐路径后再回到游戏会导致播放音乐方法失效,无论你怎么stopMusic或销毁音效资源都没有用。
在这里就不上传demo了,想解决这个问题的兄弟自己试试吧~
1.用Laya.SoundManager.playMusic()随意播放一个音效文件
2.在项目内开启Laya.SoundManager.autoStopMusic = true; //通过窗口失焦静音键让音频自动跟随设备静音
3.使游戏失焦:
这时背景音和音效都会暂停,Laya.SoundManager.musicMuted不知道有没有被设置为false,但是关键解决办法在这个值上面;
4.在失焦的前提下用Laya.SoundManager.playMusic()播放另一个背景音乐:
5.返回游戏使游戏再次获得焦点:
游戏音效不再出现,不管怎么放都不会生效。
解决方案:
1.保持 Laya.SoundManager.autoStopMusic = false; 为false:
此处我们自己来管理音效是否因为失焦而自动暂停,监听游戏失焦事件:Laya.stage.on(Laya.Event.BLUR,this,this.method);
在失焦的回调里设置:
Laya.SoundManager.musicMuted = true;
Laya.SoundManager.stopMusic();
将正在播放的音乐路径存为成员变量;
2.监听游戏获取焦点事件:
监听游戏获得焦点事件:Laya.stage.on(Laya.Event.FOCUS,this,this.method);
在获取焦点的事件里设置:
Laya.SoundManager.musicMuted = false;
将之前存好的正在播放的音乐的成员变量用Laya.SoundManager.playMusic(this.playingBGM)继续播放;
3.问题解决
总结:
目前还不知道是不是因为SoundManager内的aotuStopMusic导致的问题,不过可以证明的是如果项目在失焦的状态下并且aotuStopMusic已经被设置过true的前提下,在失焦状态下切换音乐路径后再回到游戏会导致播放音乐方法失效,无论你怎么stopMusic或销毁音效资源都没有用。
在这里就不上传demo了,想解决这个问题的兄弟自己试试吧~
要回复问题请先登录
2 个回复
sheen
赞同来自:
sheen
赞同来自:
1楼回复里提到的自动恢复只局限于在失焦情况下不切换音效的情况才行,如果在失焦情况下切换音效素材将会导致音轨、音效类会返回为空。这个打断点也很容易复现(只要你设置了autoStopMusic就会这样)