読者です 読者をやめる 読者になる 読者になる

夏までにiPhone アプリつくってみっか!

趣味でiPhone/Androidアプリを開発し、日々勉強した事を書いています。オープンワールド系レースゲームをUnityで開発中です。

【cocos2d-x, Android】ゲーム中に電源OFFでBGMが止まらない怪現象を防ぐ方法

Android cocos2d-x TravelShooting JP

先日アップデートしてコスチューム変更機能を追加した「トラベルシューティング Android版」ですが、ゲーム中に電源をOFF(画面をロック)にすると画面は消えるものの再びBGMが流れ出すという怪現象が突然発生し悩まされました。

それまでこの現象は発生していなかったので、「アップデートでバグを入れてしまったか!」と焦ったのですが、以前のバージョンで確認しても同じ現象が発生する事がわかりました。

この現象の発生後、電源ONでゲームを再開すると、画面が薄暗くなったり真っ暗な背景のなか見えない敵が襲ってくるなどの怪現象が発生するのでゲームにならず、アプリを完全に終了し、再起動する必要があります。

以前も、ロック状態からゲームを再開すると「画面が薄暗くなり敵が見えなくなる現象」が発生したことがあったのですが、発生条件がわからず放置していました。

画面が薄暗くなり広告も出っぱなしになった状態。
f:id:takujidev:20150530182811j:plain

真っ暗な背景の中、見えない敵が弾を撃ってくる。
f:id:takujidev:20150530182905j:plain

丸1日調査したのですが、原因が掴めずあきらめていたところ、次の日突然現象が発生しなくなりました。

思い当たるのはちょっと前にNexus 7の画面回転ロックを解除した事。

試しに画面回転のロックをONにしてみると再び現象が発生。

これか!

トラベルシューティングはランドスケープ(横画面)で実行されるのですが、ポートレート(縦画面)でロックを掛けたときに電源OFFでBGMが鳴りっぱなしになる模様。

こうなると、以前遭遇した、似たような現象の発生条件もなんとなく想像がつきます。
画面回転のロックはせずに、横持ちでゲーム中に電源をOFFにし、縦に持ち替えて電源ONにすると予想通り発生。

早速解決策をググって探します。

見つけたのがこのサイト。
KOBE GDG: 回転時にActivityを破棄させない方法
Activityの破棄というのがどういう事なのか理解していませんが、とりあえず試してみます。
トラベルシューティングはAPIレベル14以上のサポートなので、AndroidManifest.xmlのこの部分を、

android:configChanges="orientation">

次のように変更します。

android:configChanges="orientation|screenSize">

GDG神戸さん、ありがとうございます!

おかげ様でタチの悪いバグを取る事ができました。

そして、このバグに遭遇してしまった事のあるユーザーの皆様、大変ご迷惑をお掛けしました。
現在GooglePlayとAmazon AppStoreで公開中のバージョン1.2.1では直っていますので、アップデートをお願いいたします。

これって、普通にcocos2d-xのテンプレートからアプリを作ると必ず発生してしまう問題のような気がしますが、どうなんでしょう?
試しにcocos2d-xを使っているアプリを何個かダウンロードして試してみましたが、この現象が発生するアプリがあるようです。

ポートレートのアプリの場合はランドスケープで画面回転ロックをするとこの現象が発生しますが、デバイスをランドスケープでロックして使うシチュエーションはあまりなさそうなのでバグが顕在化していないのかも知れません。

なお、iOS版は今朝リリースされたバージョン1.2.0が最新ですが、この問題は発生しませんのでご安心ください。
iOS版、Android版ともに最新版ではコスチュームの変更ができます。
アップデートがまだの方はぜひアップデートをお願いいたします。
コスチュームを変更した状態のプレイ動画です。