2019年05月26日

最小化した時にEXC_BAD_ACCESSになる【RPGツクールMV+cordova】

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で音が鳴り続ける問題が再発したので併用しています。

 

コメントを残す