Javascript 在Howler.js中,如何仅在其他声音未播放时播放声音?
我正在用HTML5画布制作Arkanoid。我已经加载了音乐和声音,它们工作正常。 我的问题是,有时在我的代码中,当我用球拍击球时,它检测到2、3次或更多碰撞,声音在那一刻播放2、3次或更多次 这里我举了一个良好行为的例子 (在第二场比赛中发生了16次,在第二场比赛中发生了23次——一次——很好。) 这是我的一些代码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,
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!!
}