2

多くのリソースを持つアプリの起動に時間がかかる理由を理解するのに苦労しています (リソースのロードではありません。プログラムは起動時に多くのリソースをロードしません)。

明確にするために(そして、問題がリソースバンドル内のリソースの数に関連していることを確認するためにこれを行いました):

  1. 新しい cocos2d プロジェクトを作成しました。
  2. 次に、新しく作成したプロジェクトから helloWorldLayer を取得し、多くのリソース (数千の小さな png) を持つ MY APP に配置しました。
  3. 次に、MY APPs appDelegate で、通常ロードされるシーン (MainMenu だったはず) の代わりに、このレイヤー (シーン) を実行しました。出力は cocos2d テンプレートとまったく同じです。cocos2d default.png の後に「hello world」が続きます。
  4. ただし、MY APP の起動には cocos2d プロジェクトよりもはるかに時間がかかり、また、default.png の読み込み画面から実際のコード ("Hello World") に変更されます。

これは予想される動作ですか?なぜ違いがあるのですか?

4

1 に答える 1

0

cocos2d ゲームでスレッド化された読み込みを使用します。新しくロードされたリソースが使用される前に、リソースの特定のしきい値をロードしたことを確認してください。ここに私自身の質問があり、今解決しました。cocos2d sdk に 1 つのスレッド サンプルがあります。それも参照できます。

[NSThread detachNewThreadSelector:@selector(loadingThread:) toTarget:self withObject:nil];

-(void)loadingThread:(id)argument
{
    NSAutoreleasePool *autoreleasepool = [[NSAutoreleasePool alloc] init];
    CCGLView *view = (CCGLView*)[[CCDirector sharedDirector] view];
    EAGLContext *auxGLcontext = [[EAGLContext alloc]
                                 initWithAPI:kEAGLRenderingAPIOpenGLES2
                                 sharegroup:[[view context] sharegroup]];

    if( [EAGLContext setCurrentContext:auxGLcontext] ) {

        [self loadGameResource];

        glFlush(); 

        [EAGLContext setCurrentContext:nil];
    } else {
        CCLOG(@"cocos2d: ERROR: TetureCache: Could not set EAGLContext");
    }

    [auxGLcontext release];

    [autoreleasepool release];
}
于 2013-01-08T04:55:49.147 に答える