我正在开发适用于 android 的应用程序端口,但遇到了一个问题,我花了大约 8 个小时试图解决。我有这2首歌
Ptero_Lose_Music
score
通过变量加载
"Ptero_Lose_Music" : "audio/Ptero_Lose_Music"
"score" : "audio/score"
当我在游戏结束画面中调用这两首歌曲时,我想先播放丢失的音乐,然后再播放乐谱。我这样称呼他们
Ptero.audio.play('Ptero_Lose_Music');
Ptero.audio.play('score');
同时播放它们。到目前为止我已经尝试过
Ptero.audio.play('Ptero_Lose_Music').addEventListener('ended', function(){
Ptero.audio.play('score');)}
以及更多涉及时间的 if 语句。我尝试使用游戏结束场景的 .currentTime 作为"if"语句的参数来调解歌曲之间的时间,但它仍然同时播放它们。我相信我不明白如何正确排序这些类音频。
所以我用你的答案更新了片段,似乎在进入游戏结束屏幕或播放音频之前冻结了
function init() {
Ptero.audio.addEventListener('ended', function _next() { // named so..
//this.removeEventListener('ended', _next); // .. we can stop infinite loop
this.play('score');
});
Ptero.audio.play('Ptero_Lose_Music');
//Ptero.audio.play('drop_menu');
我不一定尝试使用事件侦听器,我只是想要在声音完成后播放一个声音的最佳方式。
当您使用事件侦听器时,您尝试将其链接到 mediaElement.play
这是一个 void 方法。相反,设置侦听器,然后在之后播放
假设Ptero.audio
是<audio>
元素
Ptero.audio.addEventListener('ended', function _next() { // named so..
// this.removeEventListener('ended', _next); // .. we can stop infinite loop
// replace _src_ or <source>?
this.play('score');
});
// set up _src_ or <source>?
Ptero.audio.play('Ptero_Lose_Music');
此外,您还没有确切地显示您在代码中正在做什么,因为mediaElement.play
不需要任何参数,这就是我添加注释// set up _src_ or <source>?
的原因
我最终使用了大胆,只是将 2 个声音合二为一,然后在丢失屏幕上初始化
Ptero.audio.play('Ptero_Lose_Music');