私はJavascriptで簡単なゲームを作成しています。このゲームでは、オブジェクトが壁に衝突すると、「どろどろ」の音が鳴ります。その音のラウドネスは、オブジェクトのベロシティによって異なります(ベロシティが高い=>サウンドが大きい)。
再生機能:
playSound = function(id, vol) //ID of the sound in the sounds array, volume/loudness of the sound
{
if (vol) //sometimes, I just want to play the sound without worrying about volume
sounds[id].volume = vol;
else
sounds[id].volume = 1;
sounds[id].play();
}
私の呼び方:
playSound(2, Math.sqrt(p.vx*p.vx + p.vy*p.vy)/self.TV); //self.TV stands for terminal velocity. This calculates the actual speed using the basic Pythagora's theorem and then divides it by self.TV, which results in a number from 0 to self.TV. 2 is the id of the sound I want to play.
Chromeでは、物事は非常にうまく機能します。ただし、Firefoxでは、壁との衝突が発生する(=>が呼び出される)たびに、playSound
約0.5秒続く一時停止があります。最初は問題があると思っていましたがMath.sqrt
、間違っていました。これが私がそれをテストした方法です:
//playSound(2, 1); //2 Is the id of the sound I want to play, and 1 is max loudness
Math.sqrt(p.vx*p.vx + p.vy*p.vy)/self.TV;
Math.sqrt(p.vx*p.vx + p.vy*p.vy)/self.TV;
Math.sqrt(p.vx*p.vx + p.vy*p.vy)/self.TV;
これにより、衝突の遅れが完全になくなり、Math.sqrt
問題はまったく発生していないと思います。念のために言っておきますが、私はこれを行いました。
playSound(2, 1); //2 Is the id of the sound I want to play, and 1 is max loudness
//Math.sqrt(p.vx*p.vx + p.vy*p.vy)/self.TV;
//Math.sqrt(p.vx*p.vx + p.vy*p.vy)/self.TV;
//Math.sqrt(p.vx*p.vx + p.vy*p.vy)/self.TV;
そして、ラグが戻ってきました!今、私は音を演奏することが問題を引き起こすと確信しています。私は正しいですか?なぜこうなった?どうすれば修正できますか?