2013-01-08 60 views
2

我很难理解为什么我的应用程序有很多资源需要很长时间才能启动(不加载资源,程序在启动时不会加载很多资源)。有很多资源加载的应用程序很慢

为了澄清(我这样做是为了确认该问题是在我的资源包有关的资源数量):

  1. 我创建了一个新的cocos2d项目。
  2. 然后,我从新创建的项目中取出了helloWorldLayer,并将其放入了拥有大量资源(数千个小型png)的MY APP中。
  3. 在我的应用程序appDelegate然后我跑这层(场景),而不是它通常会加载的场景(这将是MainMenu)。输出与cocos2d模板完全相同。 cocos2d default.png后跟“hello world”。
  4. 然而,启动我的APP比cocos2d项目花费了更多的时间,并且也从default.png加载屏幕更改为实际代码(“Hello World”);

这是预期的行为?为什么有差异?

+1

您是否将资产加载到应用程序委托中的精灵帧缓存中? –

+2

我更新了我的问题,因为我不清楚。 –

+0

检查你是否真的没有加载任何资源。也许你认为你不加载它们,但也许你会这样做?检查仪器以查看内存使用量是否增加,或者在通常的嫌疑犯(主要是纹理缓存)中设置断点。 – LearnCocos2D

回答

0

在cocos2d游戏中使用线程加载。确保在使用新加载的资源之前加载资源的某个阈值。 Here is my own question and solved now. cocos2d sdk中有一个线程示例..你也可以参考它。

[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]; 
} 
+1

我更新了我的问题,因为我不清楚。这个问题与加载资源无关,但与资源包的大小有关。我总是执行延迟加载,所以我从来没有很多资源一次加载,除了实际的游戏入口(即加载级别时),并且我使用进度计时器向用户指示级别正在加载。 –