我正在尝试使用 AVFoundation 框架和 AVPlayerItem 在我的 iPhone 游戏中播放背景歌曲并且还具有音效。我已经在互联网上搜索了有关 AVPlayerItem 和 AVPlayer 的帮助,但我只找到有关 AVAudioPlayer 的内容。
背景歌曲播放正常,但是当角色跳跃时,我有2个问题:
1) 初始跳跃时([player play] inside jump方法),跳跃音效打断背景音乐。
2)如果我再次尝试跳转,游戏会崩溃并出现错误“AVPlayerItem cannot be associated with more than one instance of 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.");
}
如果我将此行从第二种方法移到第一种方法中:
_mPlayer = [[AVPlayer alloc] initWithPlayerItem:[soundDictionary valueForKey:soundName]];
游戏不崩溃,背景歌曲播放完美,但不播放跳跃音效,即使控制台显示“正在播放声音”。每次跳跃。
谢谢