AVFoundationフレームワークとAVPlayerItemを使用して、iPhoneゲームでバックグラウンドソングを再生し、効果音も付けようとしています。AVPlayerItem と AVPlayer のヘルプを求めてインターネットを探しましたが、AVAudioPlayer に関する情報しか見つかりません。
バックグラウンド ソングは正常に再生されますが、キャラクターがジャンプするときに 2 つの問題があります。
1) 最初のジャンプ (ジャンプ メソッド内の [プレーヤー再生]) で、ジャンプ効果音が BGM を中断します。
2) もう一度ジャンプしようとすると、「AVPlayerItem を AVPlayer の複数のインスタンスに関連付けることはできません」というエラーでゲームがクラッシュします。
教授から、再生したいサウンドごとに AVPlayer の新しいインスタンスを作成するように言われたので、混乱しています。
私はデータ駆動型の設計を行っているため、サウンド ファイルは .txt にリストされ、NSDictionary に読み込まれます。
これが私のコードです:
- (void) storeSoundNamed:(NSString *) soundName
withFileName:(NSString *) soundFileName
{
NSURL *assetURL = [[NSURL alloc] initFileURLWithPath:[[NSBundle mainBundle] pathForResource:soundName ofType:soundFileName]];
AVURLAsset *mAsset = [[AVURLAsset alloc] initWithURL:assetURL options:nil];
AVPlayerItem *mPlayerItem = [AVPlayerItem playerItemWithAsset:mAsset];
[soundDictionary setObject:mPlayerItem forKey:soundName];
NSLog(@"Sound added.");
}
- (void) playSound:(NSString *) soundName
{
// from .h: @property AVPlayer *mPlayer;
// from .m: @synthesize mPlayer = _mPlayer;
_mPlayer = [[AVPlayer alloc] initWithPlayerItem:[soundDictionary valueForKey:soundName]];
[_mPlayer play];
NSLog(@"Playing sound.");
}
この行を 2 番目のメソッドから最初のメソッドに移動すると:
_mPlayer = [[AVPlayer alloc] initWithPlayerItem:[soundDictionary valueForKey:soundName]];
ゲームはクラッシュせず、バックグラウンド ソングは完全に再生されますが、コンソールに「サウンドを再生中」と表示されていても、ジャンプ効果音は再生されません。ジャンプごとに。
ありがとうございました