cocos2dx中的音乐完成处理程序

时间:2014-08-27 14:09:10

标签: iphone cocos2d-x simpleaudioengine

我的目标是在背景音乐结束后在cocos2dx中调用一个函数。

使用此代码播放背景音乐

    CocosDenshion::SimpleAudioEngine::sharedEngine()->playBackgroundMusic("shortSound.wav",false);

需要调用我的函数

void GamePlay::gameLevelEnds()

当背景声音结束时。

2 个答案:

答案 0 :(得分:0)

在cocos2dx中没有直接的接口可以做,但是你可以找到声音文件的持续时间并运行一个持续时间延迟的动作,然后是回调函数。

答案 1 :(得分:0)

这是可能的。

一般解决方案

float duration = 10.0f;
CCSequence *soundSequence = CCSequence::create(CCDelayTime::create(duration),CCCallFunc::create(this, callfunc_selector(GamePlay::soundEndedAction)),NULL);
this->runAction(soundSequence);

监控声音结束动作的方法

void GamePlay::soundEndedAction(){
    CCLOG("+++sound ended+++%s",__PRETTY_FUNCTION__);

}

// ========仅针对iOS平台,可以应用以下解决方案。===== //

我在" AppController.h"

中创建了一个方法
-(void)backgroundFinished;

和" AppController.mm"

-(void)backgroundFinished
{
    NSLog(@"+++Music ended....+++");
    CocosDenshion::SimpleAudioEngine::sharedEngine()->stopBackgroundMusic();
}

并在" SimpleAudioEngine_objc.m"的初始化方法中添加以下行。文件

-(id) init
{
    if((self=[super init])) {
        am = [CDAudioManager sharedManager];
        //=======added this line=========//
        [am setBackgroundMusicCompletionListener:[[UIApplication sharedApplication]delegate] selector:@selector(backgroundFinished)];//28 Aug 2014
        //===============================//
        soundEngine = am.soundEngine;
        bufferManager = [[CDBufferManager alloc] initWithEngine:soundEngine];
        mute_ = NO;
        enabled_ = YES;
    }
    return self;
}

现在在我的" GamePlay.cpp" class I预定更新方法

void GamePlay::update(float dt)
{       
    if(!CocosDenshion::SimpleAudioEngine::sharedEngine()->isBackgroundMusicPlaying())
    {
        CCLOG("+++Background Music Ended+++ :%d",CocosDenshion::SimpleAudioEngine::sharedEngine()->isBackgroundMusicPlaying());
        //Take neccessory actions
    }
}