Javascript 在Howler.js中,如何仅在其他声音未播放时播放声音?

Javascript 在Howler.js中,如何仅在其他声音未播放时播放声音?,javascript,html,audio,html5-audio,howler.js,Javascript,Html,Audio,Html5 Audio,Howler.js,我正在用HTML5画布制作Arkanoid。我已经加载了音乐和声音,它们工作正常。 我的问题是,有时在我的代码中,当我用球拍击球时,它检测到2、3次或更多碰撞,声音在那一刻播放2、3次或更多次 这里我举了一个良好行为的例子 (在第二场比赛中发生了16次,在第二场比赛中发生了23次——一次——很好。) 这是我的一些代码 sound = new Howl({ urls: ['assets/sounds.mp3'], volume: 0.2, buffer: true,

我正在用HTML5画布制作Arkanoid。我已经加载了音乐和声音,它们工作正常。 我的问题是,有时在我的代码中,当我用球拍击球时,它检测到2、3次或更多碰撞,声音在那一刻播放2、3次或更多次

这里我举了一个良好行为的例子

(在第二场比赛中发生了16次,在第二场比赛中发生了23次——一次——很好。)

这是我的一些代码

sound = new Howl({
    urls: ['assets/sounds.mp3'],
    volume: 0.2,
    buffer: true,
    sprite: {
        die: [1120, 1010],      // 1.120 start, 1.010 duration
        laser: [12485, 290],    // 12.485 start, 0.290 duration
        vaushit: [16816, 770],  // 16.816 start, 0.770 duration
        brickhit: [18616, 770]  // 18.616 start, 0.770 duration
    },
    onload: function() {
        init(); // when every music or sound is loaded
    }
});
然后我有这样的东西。(检查最后一行)

if(hit.c){
//如果命中检查
开关(结果d){
案例“顶部”:
ball.y=桨.y-球半径;
ball.angle=-ball.angle;
打破
案例“权利”:
ball.x=桨.x+桨.宽+球.半径;
ball.angle=ball.angle+Math.PI;
打破
案例“左”:
ball.x=桨.x-ball.radius;
ball.angle=ball.angle+Math.PI;
打破
}
//自旋效应
if(inputStates.right){
球角*=(球角<0?1:1.5);
}else if(inputStates.left){
球角*=(球角>0?1:1.5);
}
声音。播放('vaushit');//这里!!
}
我需要一些东西来检查声音是否正在播放

我检查过这个:

也许它与on:Call/set自定义事件的
有关。通过多次调用此选项,可以添加多个事件。


反正我也不知道怎么用这个方法!我希望你们能解释一下我的问题。

我建议看看2.0测试版(它非常稳定,接近合并)。它有一个新的.playing()方法,听起来像你想要的。@JamesSimpson谢谢你,我会尽快研究它,只要我能建议看2.0测试版(它非常稳定,接近合并)。它有一个新的.playing()方法,听起来像你想要的。@JamesSimpson谢谢你,我会尽快研究它的
    if (hit.c) {
        // If hit checkings
        switch(result.d) {
            case "top":                                
                ball.y = paddle.y - ball.radius;
                ball.angle = -ball.angle;
                break;
            case "right":                              
                ball.x = paddle.x + paddle.width + ball.radius;
                ball.angle = ball.angle + Math.PI;
                break;
            case "left":                               
                ball.x = paddle.x - ball.radius;
                ball.angle = ball.angle + Math.PI;
                break;
        }
        // spin effect
        if (inputStates.right) {
            ball.angle *= (ball.angle < 0 ? 1 : 1.5);
        } else if (inputStates.left) {
            ball.angle *= (ball.angle > 0 ? 1 : 1.5);
        }
        sound.play('vaushit'); // here!!
    }