読者です 読者をやめる 読者になる 読者になる
一人もくもく会 α verでサービス開始しました。

cocos2d-jsでのBGMの扱い

cocos2d-js

cocos2d-jsでWEBでプレイする場合はいいのだが、
androidの場合はやはりメモリの圧迫が気になる。

しかしどうもBGMを解放するためのメソッドが見つからない。
effectの方はあるようなのだが。
cocos2d-jsの場合、ライブラリのプログラムを見て無理やり実装しても
WEBでは動作してAndroidでは動作しない、ということがよくあるので
あまり時間をjsを解析しても意味が無い。

cocos2dxのマニュアルを見てみても見つからないし、
勝手にアンロードしてくれるのだろうか、と思いつつcc.audioEngineを見ていたら
cc.audioEngine.stopMusicの引数にBoolean releaseDataという記述を見つけた。
jsのプログラムを見るとどうもリソースを開放しているらしい。

Android側でも正しく動作するかは分からないが、
とりあえずこれで良さそう。

Windowsの場合は最初のプリロードでBGMを全部読み込んで、releaseDataは全部false。
Androidの場合は最初にプリロードしなくても動くので、
遅延なども気にせずplayMusicで同時に読み込ませ、
停止(他のBGMに切り替える)時にreleaseDataを全てtrueで実行する形にした。

(Android側でちゃんとリリースされているかは未検証)