在歌曲完成Javascript之后播放歌曲



我正在开发适用于 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');

最新更新