2012年10月1日月曜日

【cocos2d-x】SimpleAudioEngineのplayBackgroundMusicでハマった。

はじめに

cocos2d-2.0-x-2.0.2でのお話です。 執筆時点で2.0.3が出ているので直ってるかもしれません。

androidでだけ動かない!

特定のシーン内だけでBGMを鳴らしたかったので
void HogeScene::onEnterTransitionDidFinish()
{
    CCLayer::onEnterTransitionDidFinish();
    // playBGM
    CocosDenshion::SimpleAudioEngine::sharedEngine()->playBackgroundMusic("BGM.mp3",true);
}
void HogeScene::onExit()
{
    CCLayer::onExit();
    // stopBGM
    CocosDenshion::SimpleAudioEngine::sharedEngine()->stopBackgroundMusic();
}
としていたのですが、iOSでは問題なく動くもののandroidの実機(MOTOROLA PHOTON)でなぜかフリーズ!エラーログすら出ない! 色々試してみたら何回も読み込むのが問題ありそうだなってことで、 AppDelegate.cppのapplicationDidFinishLaunching()で
CocosDenshion::SimpleAudioEngine::sharedEngine()->playBackgroundMusic("BGM.mp3",true);
CocosDenshion::SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();
問題のシーンで
void HogeScene::onEnterTransitionDidFinish()
{
    CCLayer::onEnterTransitionDidFinish();
    // playBGM
    CocosDenshion::SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic();
}
void HogeScene::onExit()
{
    CCLayer::onExit();
    // stopBGM
    CocosDenshion::SimpleAudioEngine::sharedEngine()->rewindBackgroundMusic();
    CocosDenshion::SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();
}
とすることで問題なく動くようになりました。

0 件のコメント: