所以在我之前的问题FOUND HERE中,每当我在我的iOS游戏中跳过精灵时,我都试图找到播放“跳跃”声音的最佳方式......
由于某种原因,我已经开始担心我正在加载音频文件数百万次并浪费内存:(
Anywho,以下内容已经向我推荐了,(所以每当我通过点击屏幕跳转,声音都会加载并播放)...
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *) event
{
//NSString *
jumpSound = [[NSBundle mainBundle] pathForResource:@"boing" ofType:@"mp3"];
//AVAudioPlayer *
jumpAffect = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:jumpSound] error:NULL];
[jumpAffect prepareToPlay];
[jumpAffect play];
//then, make sprite jump
jumpUp = 16;
}
上面的方法允许我快速按下跳转并重新启动音频循环,即使前一个循环(来自上一个跳转)尚未完成。
值得记住的是,这可能会发生在每分钟数百次(或者更实际的是每秒几次)......
这是一个问题吗?完成方法/游戏循环后是否需要释放曲目?
答案 0 :(得分:0)
我认为你的最后一个问题是完全错误的。 AVAudioPlayer对游戏有太多的延迟。当你跳跃时,声音可能会在一秒钟后发生,而不是在你想要的时候发生。如果你不想每分钟播放一百万次声音,你应该使用AudioServices:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
NSURL *pathURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"boing" ofType:@"wav"]];
SystemSoundID audioEffect;
AudioServicesCreateSystemSoundID((__bridge CFURLRef) pathURL, &audioEffect);
AudioServicesPlaySystemSound(audioEffect);
//then, make sprite jump
jumpUp = 16;
}
你必须将你的mp3转换为wav或caf。但我认为这种权衡是值得的......