2011-09-10 7 views
4

シーンのBGMとキャラクターのバックグラウンドミュージックが必要ですが、キャラクターが何らかのアクションを起こすと停止する必要があります。同じ時間でCocos2dは2つの異なるバックグラウンドミュージックファイルまたはループプレイを再生します

  1. プレイ2背景音楽ファイル、および文字
  2. ループ効果音に関連する1つを停止します。私はオプションに持っている。この問題については

どれが2つありますか&をお勧めしますか?

よろしくお願いいたします。

答えて

16

あなたはcocos2dを使用していると言っていますので、私はあなたもSimpleAudioEngineでcocos2dを使用していると仮定しました。

SimpleAudioEngineでは、2つの背景トラックを再生することはできません。いくつかの小さな変更でエフェクトをループすることが可能です:

  • -(int) playEffect:(NSString*) file loop:(BOOL) loopメッセージを入力します。
  • この方法では、通常どんな演奏効果があるかを調べる必要があります。あなたが探しているのは、サウンドのハンドルとして使用されているALUIntです。これを参考にしてください。ループを止めるには、それが必要です。
  • -(void) stopEffectWithHandle:(int) handleを入力し、OpenALに戻して効果を停止します。

-EDIT-

ここで効果をループするためのいくつかのコードです:

効果を停止させるための
int handle = [[SimpleAudioEngine sharedEngine] playEffect:name]; 
if (loop) { 
    alSourcei(handle, AL_LOOPING, 1); 
} 
return handle; 

そして、いくつか:@JamesWebsterの答えに

[[SimpleAudioEngine sharedEngine] stopEffect:handle]; 
+0

これは完全に機能します!ありがとう! – mxg

+0

同時に多くの別のエフェクトを再生すると、ループで停止されるエフェクトが見つかりました。 –

+0

これは、同時にロードできるサウンドの数がCocosDensionに制限があるためだと思います。 –

0

@ToughGuyのコメントが私はその解決策で同じ問題に遭遇しました。

私はthis forum postからこのアプローチを使用してこの問題を解決しました。

プレイと効果:

CDSoundSource *loopSound = [[SimpleAudioEngine sharedEngine] soundSourceForFile:LOOPING_SOUND_FILENAME]; 
loopSound.looping = YES; 
[loopSound play]; 

し、それを停止します。このことができます

[loopSound stop]; 

希望。

関連する問題