galapagosit’s blog

本家 > http://galapagosit.com/

Cocos2d-JSでBGM・効果音をpreload

Cocos2d-JSネイティブアプリ(not ブラウザ)で音声ファイルを再生する時のメモ。
音声ファイルは下記のコードで再生できるが、初回実行時に若干遅れて聞こえる。。。

cc.audioEngine.playEffect(mp3file);

調べてみるとC++で言うところの
SimpleAudioEngine::preloadEffect
なる処理を予めやっておかないと初回読み込みに時間がかかってしまうらしい。

同様の処理をCocos2d-JSで出来ないか調べてみた。

結論から言うと、事前に下記の処理を実行しておけば良いっぽい

cc.audioEngine.preloadEffect(mp3file);
おまけ(調べた過程)

公式ドキュメント
http://www.cocos2d-x.org/reference/html5-js/V3.0/index.html
のcc.audioEngineにはそれらしきメソッドは記載されていなかった。。。
(おそらくブラウザ環境と互換性が無いため?)

cocos2d-js-v3.0/samples/js-tests/src/
配下のサンプルにも無い。。。

こういう時は黙ってソースを読むしか無いw

tools/tojs/cocos2dx.ini
に下記の記載を発見

rename_functions = ...
        SimpleAudioEngine::[preloadBackgroundMusic=preloadMusic setBackgroundMusicVolume=setMusicVolume getBackgroundMusicVolume=getMusicVolume playBackgroundMusic=playMusic stopBackgroundMusic=stopMusic pauseBackgroundMusic=pauseMusic resumeBackgroundMusic=resumeMusic rewindBackgroundMusic=rewindMusic isBackgroundMusicPlaying=isMusicPlaying willPlayBackgroundMusic=willPlayMusic],

...
rename_classes = ...
    SimpleAudioEngine::AudioEngine,

クラス名、メソッド名共に別名が付けられているっぽい!

そして

frameworks/js-bindings/bindings/script/jsb_boot.js

内で、

cc.audioEngine = cc.AudioEngine.getInstance();

されてる、って感じで結論になりました。