OK、これが私が好むアプローチです。「バックグラウンドミュージック」サウンドと「エフェクト」サウンドのどちらを再生しているかによって異なります。
MP3
サウンド、つまりバックグラウンドミュージックを再生している場合:
1)スプライトコンストラクターにパラメーターを追加して、サウンドファイルを割り当てます。
[MySpriteClass spriteWithSound:@"mySound.mp3"];
2)単に使用する:
// on touchDragged:
[[SimpleAudioEngine sharedEngine] playBackgroundMusic:self.sound];
// on touchEnded: touchCancelled:
[[SimpleAudioEngine sharedEngine] stopBackgroundMusic];
注:このアプローチは、一度に1つのBGMしか再生できないため簡単です。
圧縮されていないサウンドを再生している場合、つまりエフェクト:
1)スプライトコンストラクターにパラメーターを追加して、サウンドファイルを割り当てます。
[MySpriteClass spriteWithSound:@"mySound.caf"];
touchDragged:
2)戻り値を保存しながら、エフェクトを再生します。
// on touchDragged:
soundID = [[SimpleAudioEngine sharedEngine] playEffect:self.sound];
3) :touchEnded:
の使用による影響を停止します。soundID
// on touchEnded: cancelled:
[[SimpleAudioEngine sharedEngine] stopEffect:soundID];
注:このアプローチは、一度により多くのサウンドを再生できるため、より優れています。
最後のコメント:
それぞれの異なるスプライトのサブクラス(つまり、、、FishSprite
...DogSprite
など)があり、任意のクラスのすべてのインスタンスが同じサウンドを持つ場合は、静的メソッドを追加して、そのクラスのサウンド名を返すことをお勧めします。
// somewhere in DogSprite.m
+ (NSString *)soundName {
return @"bark.caf";
}
touchDragged:
また、完全を期すために、、を実装するスーパークラスを追加して、touchEnded:
冗長なコードがないようにします。
// on touchDragged:
soundID = [[SimpleAudioEngine sharedEngine] playBackgroundMusic:[[self class] soundName]];
// on touchEnded: cancelled:
[[SimpleAudioEngine sharedEngine] stopEffect:soundID];