1

SimpleAudioEngine でのサウンドのプリロードについて読みました

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

しかし、これにはいくつかのサイトで読んだメモリリークがあります。一部の Web サイトでは、次のように使用されていました。

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

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

    [pool release];
}

SimpleAudioEngine を介してバックグラウンドでサウンド ファイルをロードする最良の方法は何ですか? ここで NSAutoreleasePool の使用は何ですか? バックグラウンドでサウンドファイルをロードすることは本当に必要ですか? どのウェブサイトでも満足のいく答えが見つかりませんでした。

4

1 に答える 1

2

Cocos2D に関する多くの情報はかなり古いため、このメソッドがメモリ リークを起こすと言っている Web サイトは信じられません。まず、これはすでに修正されている可能性があります。第二に、結局のところ、それは「真の」リークではない可能性があります。一部の開発者は、Instruments グラフの読み方や、問題を個別にテストする方法を知らないだけです。

最初の質問に答えるには、サウンド エフェクトをプリロードして、そのサウンドを初めて再生するときにファイルをロードする必要がないようにします。たとえば、ゲーム内の敵の種類ごとに 10 種類の「発砲」サウンドをプリロードしていない場合、新しい敵の種類が初めて発砲するたびに、わずかな遅延に気付くことがあります。これはごくわずかであるか、ゲームが数十分の一秒間停止することさえあり、プレーヤーがそのような予期しないしゃっくりに対して準備ができていないため、コントロールが応答しなかったり、突然死の状況につながる可能性があります。

したがって、テンポの速いゲームでは、ゲーム開始前にすべてのゲームプレイ サウンド エフェクトをプリロードする必要があります。

于 2011-12-16T16:41:33.273 に答える