所以在我之前的问题FOUND HERE ,每次我在我的 iOS 游戏中让我的 Sprite 跳跃时,我都试图找到播放“跳跃”声音的最佳方式......
今天出于某种原因,我开始担心我正在加载音频文件数百万次并浪费内存:(
任何人,已经向我建议了以下内容,(所以每次我通过点击屏幕跳跃时,都会加载并播放声音)......
-(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;
}
上述方法允许我快速按下跳转并重新启动音频循环,即使前一个循环(来自上一个跳转)尚未完成。
值得记住的是,这可能每分钟发生数百次(或者更现实的是每秒发生几次)......
这是一个问题吗?完成方法/游戏循环后是否需要释放轨道?
最佳答案
我认为你的最后一个问题完全不正确。 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。但我认为这个权衡是值得的......
关于ios - 发布音频 - Cocoa Xcode(内存管理),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26290200/