gpt4 book ai didi

ios - 发布音频 - Cocoa Xcode(内存管理)

转载 作者:行者123 更新时间:2023-12-03 02:08:21 25 4
gpt4 key购买 nike

所以在我之前的问题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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com