2010-06-24 4 views
0

Я использую cocos2d 0.99.4 и Xcode 4.0. поэтому я изменил свой AppDelegate таким образом в соответствии с документацией и примером, приведенным в версии 0.99.4.Предупреждение о наличии памяти. Уровень = 2. Data Formatters временно недоступны, повторите попытку после 'continue'

- (void) applicationDidFinishLaunching:(UIApplication*)application 
{ 
    window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    [CCDirector setDirectorType:kCCDirectorTypeDisplayLink]; 
    CCDirector *director = [CCDirector sharedDirector]; 
    [director setDeviceOrientation:kCCDeviceOrientationLandscapeLeft]; 
    [director setAnimationInterval:1.0/60]; 
    [director setDisplayFPS:NO]; 
    EAGLView *glView = [EAGLView viewWithFrame:[window bounds] 
           pixelFormat:kEAGLColorFormatRGBA8    
           depthFormat:GL_DEPTH_COMPONENT24_OES 
        preserveBackbuffer:NO]; 

    [[CCDirector sharedDirector] setOpenGLView:glView]; 

    [window addSubview:glView]; 
    [window makeKeyAndVisible]; 

    [CCTexture2D setDefaultAlphaPixelFormat:kCCTexture2DPixelFormat_RGBA8888]; 
    gameLevel = [[NSUserDefaults standardUserDefaults] integerForKey:@"gameLevel"] ; 
    gameLevel = 1; 

    CCScene *scene = [CCScene node]; 
    CCLayer *layer = [GamewinScreen node]; 
    [scene addChild :layer]; 

    [[CCDirector sharedDirector] runWithScene: scene]; 

} 

// Метод test1 также находится в классе делегата приложения.

-(void)test1 
{ 

    [[CCDirector sharedDirector] end]; 
    [[CCDirector sharedDirector] setOpenGLView:[[window subviews] objectAtIndex:0]];  

    CCScene *Scene = [CCScene node]; 
    CCLayer *Layer = [OpeningScreen node]; 

    [Scene addChild:Layer]; 

    [[CCDirector sharedDirector] runWithScene: Scene]; 
} 

В GameWinScreen У меня есть селектор @selector (goToFirstScreen),

-(void)goToFirstScreen:(id)sender 
{ 
    [MY_DELEGATE performSelector:@selector(test1) withObject:nil afterDelay:1.0]; 
} 

После игры в течение 50 минут и больше я получаю

Received memory warning. Level=1 

более чем в 10 раз и затем
Предупреждение о получении памяти. Уровень = 2

и приложение терпит крах. дает следующее сообщение

Program received signal: “0”. 
Data Formatters temporarily unavailable, will re-try after a 'continue'. (Unknown error loading shared library "/Developer/usr/lib/libXcodeDebuggerSupport.dylib") 

alt text http://www.freeimagehosting.net/uploads/52ac11fe93.png

alt text http://www.freeimagehosting.net/uploads/619333a82f.png

ответ

1

Это cocos2d говорит вам, что вы делаете что-то неправильно. Вы звоните setDirectorType на директора в goToFirstScreen, но во второй раз, когда вы его называете, есть уже директор. Я не уверен, почему вы перезапускаете директора. Почему бы не просто заменить сцену:

-(void)goToFirstScreen:(id)sender 
{ 
    CCScene *Scene = [CCScene node]; 
    CCLayer *Layer = [OpeningScreen node]; 
    [Scene addChild:Layer]; 
    [[CCDirector sharedDirector] replaceScene:Scene]; 
} 
+0

Я использовал первую заменить сцену, но, когда я играл в игру в течение более 50 минут непрерывно он задающих уровень предупреждения памяти 1, а затем памяти Предупреждение Уровень 2, а затем сбой. Итак, я думал о конце CCDirector и снова перезапустить. Спасибо. –

+0

Утечка памяти, перезапуск режиссера не поможет никому, кроме замены сцены, потому что ваш слой «OpenScreen» является единственным вашим объектом, который он сохраняет. Попробуйте запустить инструмент «Утечки», чтобы узнать, какая память вы протекаете. –

+0

Я проверил с помощью средства утечки. Он показывает некоторые утечки. Утечки находятся в CA :: DisplayLink :: dispatch. когда я нажимал на него, он не показывает программу. Я загрузил изображения утечек. Можете ли вы посмотреть на них, пожалуйста. Спасибо. –

Смежные вопросы