1

多くのユニークなユニットを持つゲームがあり、各ユニットには独自のスプライト シートがあります (各ユニットには複数のアニメーションがあるため)。ユニットを含むシーンが作成されると、これらすべてのアセットの初期化に多くの時間がかかります (数秒)。具体的には、このコードの実行中は UI がロックされます。

  NSString *unitSheetName = [self getUnitSheetName];
  [[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:unitSheetName];

  CCSprite *frame = [CCSprite spriteWithSpriteFrameName:kDefaultFrameName];
  // etc...

ただし、次にpopシーンを作成し、同じシーン (およびpushそれ) の新しいバージョンを作成すると、ロードにかかる時間はわずかになります (UI はロックされません)。したがって、UI のロックは、スプライト シートの初期キャッシュが原因のようです...

ゲームの起動中にCCSpriteFrameCache'sメソッドを呼び出すことで、この遅延を回避できることを願っていましたが、これはうまくいかないようです。addSpriteFramesWithFileこれを行っているにもかかわらず、初期ロードにはまだ長い時間がかかります。

アセットをプリロードする効果的な方法はありますか? シーンがプッシュされたときに後で UI がロックされないことを確認できれば、スタートアップの読み込み画面に 1、2 秒追加してもかまいません...

4

1 に答える 1

1

上記の@LearnCocos2Dの返信によると、スプライトシートを適切かつ完全にプリロードする方法は次のとおりです(fpSheetはシートのファイルパスです):

  [[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:fpSheet];

  NSDictionary *spriteSheet = [NSDictionary dictionaryWithContentsOfFile:fpSheet];
  NSString *fnTexture = spriteSheet[@"metadata"][@"textureFileName"];
  [[CCTextureCache sharedTextureCache] addImage:fnTexture];
于 2013-11-08T04:36:34.493 に答える