ゲームの音楽にはココスデンシオンを使用しています。私は現在、次のコードでバックグラウンドミュージックを再生しています:
[[SimpleAudioEngine sharedEngine] playBackgroundMusic:@ "backSong.mp3"];
ただし、ゲームが終了すると、バックグラウンドミュージックが徐々にフェードアウトする必要があります。バックグラウンドミュージックをフェードアウトするにはどうすればよいですか?これを行う方法はありますか?前もって感謝します!さらに、ObjectALはCocosDenshionよりも優れていますか?もしそうなら、違い/利点は何ですか?
質問する
2448 次
2 に答える
9
これを試して:
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];
お役に立てば幸いです。
于 2014-01-21T21:08:10.053 に答える
2
それを行うために私が見つけた唯一の方法は、実行するメソッドをスケジュールし、それに応じてボリューム設定を変更することです。
-(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:)];
}
}
}
これは、私のサウンドサービスプロバイダー実装クラスからの簡略化された(編集された)サンプルです(ここに示されているようにテストされていません)。一般的な考え方は、一定期間にわたって音楽を徐々にフェードアウトする方法を自分でスケジュールすることです(ここではアプリ全体の定数、K_MUSIC_FADE_TIME)。
于 2012-05-22T20:06:12.043 に答える