Ios SpriteKit:在播放前将声音文件预加载到内存中?

Ios SpriteKit:在播放前将声音文件预加载到内存中?,ios,objective-c,ios7,sprite-kit,Ios,Objective C,Ios7,Sprite Kit,只是想知道这是否可能。目前,我第一次在应用程序运行时播放声音文件时,在声音实际播放之前有一个明显的延迟(比如它正在缓存它或其他东西)。在此之后,它会立即播放,不会出现问题,但如果我完全关闭应用程序并重新启动它,延迟将在第一次播放声音时恢复。下面是我用来播放声音的代码: [self runAction:[SKAction playSoundFileNamed:@"mySound.caf" waitForCompletion:NO]]; 您可以采取的一种方法是在场景开始的右侧加载声音: 你的场景。

只是想知道这是否可能。目前,我第一次在应用程序运行时播放声音文件时,在声音实际播放之前有一个明显的延迟(比如它正在缓存它或其他东西)。在此之后,它会立即播放,不会出现问题,但如果我完全关闭应用程序并重新启动它,延迟将在第一次播放声音时恢复。下面是我用来播放声音的代码:

[self runAction:[SKAction playSoundFileNamed:@"mySound.caf" waitForCompletion:NO]];

您可以采取的一种方法是在场景开始的右侧加载声音:

你的场景。h:

@interface YourScene : SKScene
@property (strong, nonatomic) SKAction *yourSoundAction;
@end
你的场景

- (void)didMoveToView: (SKView *) yourView
{
    _yourSoundAction = [SKAction playSoundFileNamed:@"yourSoundFile" waitForCompletion:NO];
    // the rest of your init code
    // possibly wrap this in a check to make sure the scene's only initiated once...
}
这将预加载声音,您应该能够通过在场景中调用动作来运行声音:

[self runAction:_yourSoundAction];

我曾在有限的场景中尝试过这一方法,似乎可以消除延迟。

我建议您使用仪器查看延迟可能发生的位置。使用“时间分析器”工具查看哪些代码占用的时间最多,还可以使用CPU策略视图查看在感兴趣的时间之间CPU上发生了什么。如果你愿意,你可以在那里发布通过分析应用程序发现的问题点。非常感谢你的回答!同样的问题也在折磨着我。根据我的经验,你不需要“保留”对动作的引用。似乎SpriteKit在为该文件创建播放声音的任何实例后都会保留加载的音频。不完全是这样。我刚刚执行了[SKAction PlaySoundFileName:@“yourSoundFile”waitForCompletion:NO];在我的应用程序中:(UIApplication*)应用程序使用选项完成启动:(NSDictionary*)启动选项