2

私の Cocos2d ゲームでは、メイン ゲームの開始前にすべてのアセット (テクスチャ アトラスとサウンド ファイル) をロードしたいと考えています。これを行うために、メインのゲーム シーン内にレイヤーを作成し、それを preloadLayer と呼び、これを最上位レイヤーとしてシーンに追加しました。

preloadLayer は 2 つのスプライトで構成され、1 つは画面の上半分を覆い、もう 1 つは画面の下半分を覆います。すべてのアセットが読み込まれたら、2 つのスプライト シートを画面の外に出してメイン ゲームを表示させたいと思います。

preloadlayer は次のものをロードします。

  • 1 つの背景 png 画像
  • 1 つのスプライト シートの png 画像
  • いくつかのサウンドファイル
  • ワンフォントアトラス

質問は次のとおりです。

  • これを達成するための最良の方法は何ですか?
  • preloadlayer が読み込みを完了したことを他のレイヤーに伝えるにはどうすればよいですか。
  • すべてが読み込まれ、画面の外に消えて他のレイヤーが表示されることを preloadLayer に伝えるにはどうすればよいですか。

私が使用しているテクスチャアトラスの[CCSpriteFrameCache sharedSpriteFrameCache]場合、フォントアトラスの場合は、を使用してロードしてい[CCLabelBMFont labelWithString:Str fntFile: file]ます。

ご協力をお願いいたします。

4

2 に答える 2

3

コールバックを使用して、画像を非同期的にキャッシュにプリロードできます。

[[CCTextureCache sharedTextureCache] addImageAsync:imagePath target:self selector:@selector(imageLoaded:)];

コールバックの署名:

-(void)imageLoaded:(CCTexture2D*)texture;

最後の画像が読み込まれたことを確認できるように、コールバックを構成します。この方法で複数のイメージのロードを開始すると、開始した順序で完了しない場合があることに注意してください。

于 2012-04-13T15:43:37.220 に答える
1

CCTextureCache次のように使用します。

[[CCTextureCache sharedTextureCache] addImage:@"myImageName"];

およびサウンドの場合:

[[SimpleAudioEngine sharedEngine]preloadBackgroundMusic:@"myMusicFile"];
// or
[[SimpleAudioEngine sharedEngine]preloadEffect:@"myEffectSoundFile"];

効果は小さなファイルに使用され、BGM はループすることが多い大きなファイルに使用されます

最も簡単な方法...そしてメモリ管理に優れています(別名..レベル1のメモリ警告を受け取ったときにそれ自体を解放します)

メソッドと詳細については、クラス リファレンスを参照してください。

編集:

次のようなことをしてください:

if([[CCTextureCache sharedTextureCache] addImage:@"myImageName"]) {
//image loaded
}

私が言うのを忘れていたのは、if を使用する場合、他のものを実行する必要がないため、if がローディング自体を置き換えるということです (しかし、それは明らかだと思います)。

于 2012-04-12T22:39:37.573 に答える