1

我通过以下方式阅读了有关在 SimpleAudioEngine 中预加载声音的信息

[[SimpleAudioEngine sharedEngine] preloadEffect:@"bell.wav"];

但是,有了这个,我在几个网站上读到了内存泄漏。在某些网站上,它是这样使用的:-

-(void)loadSoundFilesInBackground
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    [[SimpleAudioEngine sharedEngine] preloadEffect:@"bell.wav"];

    [pool release];
}

通过 SimpleAudioEngine 在后台加载声音文件的最佳方法是什么?NSAutoreleasePool 在这里有什么用?真的需要在后台加载声音文件吗?我在任何网站上都找不到满意的答案。

4

1 回答 1

2

由于很多关于 Cocos2D 的信息已经很老了,我不会相信一个网站说这种方法会泄漏内存。首先,这可能已经修复了。其次,它毕竟可能不是“真正的”泄漏。一些开发人员只是不知道如何阅读 Instruments 图表,或孤立地测试问题。

要回答您的第一个问题:您预加载声音效果,以便在您第一次播放该声音时不必加载文件。例如,如果您没有为游戏中的每种敌人类型预加载 10 种不同的“射击”声音,那么每次新的敌人类型第一次射击时,您可能会注意到一个小的延迟。这可以忽略不计,甚至会使您的游戏暂停十分之几秒,并且可能导致控件无响应或突然死亡的情况,因为玩家没有为这种意外的打嗝做好准备。

因此,快节奏游戏应在游戏开始前预加载所有游戏音效。

于 2011-12-16T16:41:33.273 回答