我正在用HTML5画布制作一个打砖块。我已经加载了音乐和声音,它们工作正常。 我的问题是,有时候在我的代码中我用球拍击球时,它会检测到2次,3次或更多次碰撞,声音会在那一刻播放2,3次或更多次。
这里我有一个声音行为的例子。
https://u.pomf.is/mgmhsq.webm(在第二个16发生,在第二个23发挥-once-就好了。)
以下是我的一些代码
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) {
// 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!!
}
我需要检查声音当前是否正在播放。
我已经检查了这个:https://github.com/goldfire/howler.js
可能与on: Call/set custom events. Multiple events can be added by calling this multiple times.
我不知道怎么用这个方法!我希望你们能解决我的问题。