我用SpriteKit它一切都很好,如果你关掉它显示几乎稳定的 60fps 的声音。但是,一旦您打开声音,声音播放过程中就会开始出现令人不快的 2-3-4-5 帧缩减,这不会特别破坏任何东西,但同时会产生令人不快的微冻结,您会觉得没有足够的平滑度。
其实问题是:如何在iOS/SpriteKit不损失fps的情况下输出声音?
SKAudioNode最初,我以前不玩dispatch,而且亏损很大,然后我把它改成了这样:
dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void){
SKAudioNode *newAudio = [[SKAudioNode alloc] initWithFileNamed:nameSound];
[newAudio runAction:[SKAction changeVolumeTo:1.0 duration:0]];
newAudio.autoplayLooped = false;
dispatch_async(dispatch_get_main_queue(), ^{
[scene addChild:newAudio];
[newAudio runAction:[SKAction play]];
});
});
进行此更改后,它变得好多了,但是,正如我上面所写的,仍然有一些我想摆脱的令人不快的回撤。如果你完全删除声音的播放,那么稳定的 60fps。
我也尝试通过 播放声音AVAudioPlayer,但结果比使用 更糟糕SKAudioNode,缩减甚至更大。
我使用AVAudioPlayer
我还没有注意到任何 FPS 因声音而下降。我曾经使用过
SKAction.playSoundFile...它,这就是 FPS 没有下垂的地方,但是由于我每次创建节点时都创建了一个动作,因此游戏在第一次播放声音时就卡住了。只需将动作放在属性中,然后将其应用于对象即可解决。通过 SKActions
财产:
在您要播放声音的方法中:
通过 AVAudioPlayer:
要快速输出声音,需要使用audiounit的