キノコが何か作るブログ

ゲーム・ドット絵・アプリなどを作ります

MENU

音量調整で右往左往する

音量調整機能

音量調節機能を作ったらバグりました。
f:id:mizukinoko:20200118191545g:plain
JavaScriptで実数の計算をするとこの様な誤差が生じるらしいです。

C++でもPythonではなかったことなので、最初見た時は何これ?って感じでした。

色々試した結果、このようにすれば誤差が出なくなりました。

//BGMボリュームを上げるボタンの動作
this.upMusicVolumeButton.onpointend = function(){
    var musicVolume = (Number(Math.round(SoundManager.musicVolume * 100)) + 1) / 100;
    SoundManager.setVolumeMusic(musicVolume);
    self.musicVolumeNumLabel.text = String(Math.round(SoundManager.musicVolume * 100));
}

整数に直して計算すれば誤差はでません。

実数を整数に直す際に100を掛けてますが、この時既に誤差が生じるので四捨五入して誤差を丸め込みます。そのうえでNumberで整数にして計算させます。

JavaScriptで実数を使う時点で誤差が出るのは避けては通れないようです。

この間の記事についての訂正とお詫び

もう削除してしまいましたが「phina.jsで音量調整する際の注意点」という記事をこの前書きました。

あの記事で「一度音楽を流したら、途中で音量調整は出来ない」と書きましたが、間違いでした。

今回、音量調節機能を作った際に、再生中の音源の音量を変更できることが確認できました。

お詫びして訂正いたします。

プライバシーポリシー