La musique de CocosDenshion disparaît

J'utilise cocos denshion pour la musique dans mon jeu. Je joue actuellement de la musique de fond avec le code:
[[SimpleAudioEngine sharedEngine] playBackgroundMusic: @ "backSong.mp3"];
Cependant, quand le jeu se termine, j'ai besoin que la musique de fond disparaisse graduellement. Comment puis-je faire disparaître la musique de fond, y a-t-il un moyen de le faire? Merci d'avance! De plus, ObjectAL est-il meilleur que CocosDenshion? Si oui, quelles sont les différences / avantages?

La seule façon de le faire est de programmer une méthode pour l'exécution et de modifier le réglage du volume en conséquence, comme suit:

-(void) fadeOutBackgroundMusic{ if (!currentBackgroundMusic_) { CCLOG(@"GESoundServicesProviderImpl<fadeOutBackgroundMusic> : No background music at this time, ignoring."); return; } fadeOutActionTickerCount_=0; [self schedule:@selector(tickMusicFadeOut:)]; } -(BOOL) isPlayingBackgroundMusic{ return isPlayingBackgroundMusic_; } #pragma mark sequencing stuff -(void) tickMusicFadeOut:(ccTime) dt{ static float fadeTime; static float volume; static float maxVolume; fadeOutActionTickerCount_++; if (1==fadeOutActionTickerCount_) { isPerformingFadeOutAction_ =YES; fadeTime=0.0f; volume=0.0f; maxVolume=audioSettings_.masterVolumeGain*audioSettings_.musicCeilingGain; } else { fadeTime+=dt; volume=MAX(0.0f, maxVolume*(1.0 - fadeTime/K_MUSIC_FADE_TIME)); [self setMusicVolume:volume]; if (fadeTime>K_MUSIC_FADE_TIME) { volume=0.0f; // in case we have a .000000231 type seting at that moment. } if (volume==0.0f) { CCLOG(@"GESoundServicesProviderImpl<tickMusicFadeOut> : background music faded out in %f seconds.",fadeTime); [self setMusicVolume:0.0f]; [sharedAudioEngine_ stopBackgroundMusic]; self.currentBackgroundMusic=nil; isPlayingBackgroundMusic_=NO; isPerformingFadeOutAction_=NO; [self unschedule:@selector(tickMusicFadeOut:)]; } } } 

Ceci est un exemple simplifié (modifié) de ma class d'implémentation de fournisseur de services sonores (non testé comme illustré ici). L'idée générale est de programmer vous-même une méthode qui va progressivement faire disparaître la musique sur une période de time (ici une constante à l'échelle de l'application, K_MUSIC_FADE_TIME).

Essaye ça:

 float currentVolume = [SimpleAudioEngine sharedEngine].backgroundMusicVolume; id fadeOut = [CCActionTween actionWithDuration:1 key:@"backgroundMusicVolume" from:currentVolume to:0.0f]; [[[CCDirector sharedDirector] actionManager] addAction:fadeOut target:[SimpleAudioEngine sharedEngine] paused:NO]; 

J'espère que cela pourra aider!