個人製作で生計を立てたい人が目標を達成すべく制作物や開発日記や技術メモを記録しておくサイトです!
RPGツクールMVをcordovaでビルドし、iOS実機でシミュレートした時、
アプリを最小化した際にEXC_BAD_ACCESSエラーが発生しました。
調べてみたところ、見つかったのがこのページ
https://stackoverflow.com/questions/25952409/app-crashes-at-gpus-returnnotpermittedkillclient
どうやらバックグラウンド状態の時にOpenGLのコマンドが走ると落ちるとか、そんな感じらしい。
そもそもRPGツクールMVをcordovaでビルドしただけだと、アプリを最小化しても延々とゲーム音が流れ続けるので、以下のコードで最小化した時に音を消し、戻ってきた時に復活させる処理を入れていた。
// 最小化・戻る時のイベント var tempVolume = 20; document.addEventListener("pause", onPause, false); function onPause() { tempVolume = WebAudio._masterVolume; WebAudio.setMasterVolume(0); } document.addEventListener("resume", onResume, false); function onResume() { WebAudio.setMasterVolume(tempVolume); }
ボリュームを消してるだけで根本的な解決にはならないよなーとは思ってはいたのだけど、やはり問題が出てしまった。
という事で対応。
var tempVolume = 20; document.addEventListener("pause", onPause, false); function onPause() { tempVolume = WebAudio._masterVolume; WebAudio.setMasterVolume(0); SceneManager.stop(); } document.addEventListener("resume", onResume, false); function onResume() { WebAudio.setMasterVolume(tempVolume); SceneManager.resume(); }
pauseイベントに
SceneManager.stop();
resumeイベントに
SceneManager.resume();
を入れました。
これでRPGツクール自体のイベントが停止/再開し、最小化してもエラーにならなくなりました。
消してみたらandroidで音が鳴り続ける問題が再発したので併用しています。