Перезапуск CCDIrector вызывает странную ошибку - PullRequest
0 голосов
/ 28 ноября 2011

Я пытаюсь перезапустить мой CCDirector моей игры.Но у меня есть и ошибка.

Подходит все это мой код в моем меню [мое меню с XIB]:

- (void) retryGame:(NSNotification *)notif {
    [menu2Game.view removeFromSuperview];
    [[CCDirector sharedDirector] end];
    [[CCDirector sharedDirector] release];

    [self startGame:play];
}

И это дает мне и EXC_BAD_ACCESS.Просто, когда я делаю это два раза.Первый работает отлично ...

Но если удалить

[self startGame:play];

, я вернусь в меню, и я нажму кнопку воспроизведения, и я мог бы уклоняться от нее бесконечное количество раз, и она работает!

Мой выход такой, и он работает, я пробую 20 раз.

- (void) quitGame:(NSNotification *)notif {
    [menu2Game.view removeFromSuperview];
    [[CCDirector sharedDirector] end];
    [[CCDirector sharedDirector] release];

    //Restart Animations
    [logo setFrame:CGRectMake(239, 119, 1, 1)];
    [play setFrame:CGRectMake(-233, play.frame.origin.y, play.frame.size.width, play.frame.size.height)];
    [options setFrame:CGRectMake(-233, options.frame.origin.y, options.frame.size.width, options.frame.size.height)];
    [extras setFrame:CGRectMake(-233, extras.frame.origin.y, extras.frame.size.width, extras.frame.size.height)];
    [GC setFrame:CGRectMake(0, 300, 1, 1)];

    [self viewDidLoad];
}

// В моем viewdidLoad есть только анимация

Что может бытьпроблема?я пытаюсь сделать это с задержкой [perfomselector], но это та же проблема ... Просто если я вернусь в меню и нажму кнопку воспроизведения, я смогу играть снова.Независимо от скорости, вы можете нажать кнопку «Играть», «Пауза», «Выйти», «Играть», «Пауза», «Выйти» и т. Д.

Ответы [ 2 ]

1 голос
/ 29 ноября 2011

CCDirector является одиночным, вы НЕ ДОЛЖНЫ отправлять ему сообщение о выпуске!

[[CCDirector sharedDirector] release];

Это прекрасно, не делать этого. Что бы это ни стоило, CCDirector startAnimation и stopAnimation являются более реальными способами временной остановки Cocos2D.

0 голосов
/ 05 декабря 2011

Та же проблема

- (void) retryGame:(NSNotification *)notif {
    [menu2Game.view removeFromSuperview];
    [[CCDirector sharedDirector] end];
    //[[CCDirector sharedDirector] release];

    [self startGame:play];
}

Запустить игру

 - (IBAction)startGame:(id)sender {


    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(quitGame:) name:@"quitGame" object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(retryGame:) name:@"retryGame" object:nil];

    CCDirector *director = [CCDirector sharedDirector];

    // Init the View Controller
    menu2Game = [[Menu2Game alloc] initWithNibName:@"Menu2Game" bundle:nil];
    menu2Game.wantsFullScreenLayout = YES;

    //
    // Create the EAGLView manually
    //  1. Create a RGB565 format. Alternative: RGBA8
    //  2. depth format of 0 bit. Use 16 or 24 bit for 3d effects, like CCPageTurnTransition
    //
    //
    EAGLView *glView = [EAGLView viewWithFrame:[self.view bounds]
                                   pixelFormat:kEAGLColorFormatRGB565   // kEAGLColorFormatRGBA8
                                   depthFormat:0                        // GL_DEPTH_COMPONENT16_OES
                        ];

    // attach the openglView to the director
    [director setOpenGLView:glView];

    // Enables High Res mode (Retina Display) on iPhone 4 and maintains low res on all other devices
    //  if( ! [director enableRetinaDisplay:YES] )
    //      CCLOG(@"Retina Display Not supported");


    [director setAnimationInterval:1.0/60];
    [director setDisplayFPS:YES];


    // make the OpenGLView a child of the view controller
    [menu2Game setView:glView];

    // make the View Controller a child of the main window
    [self.view addSubview: menu2Game.view];

    // Default texture format for PNG/BMP/TIFF/JPEG/GIF images
    // It can be RGBA8888, RGBA4444, RGB5_A1, RGB565
    // You can change anytime.
    [CCTexture2D setDefaultAlphaPixelFormat:kCCTexture2DPixelFormat_RGBA8888];

    // Assusme PVR images have the alpha channel premultiplied
    [CCTexture2D PVRImagesHavePremultipliedAlpha:YES];

    // Run the intro Scene
    if ([director runningScene] == NULL) {
        [[CCDirector sharedDirector] runWithScene:[Game scene]];
    }else{
        [[CCDirector sharedDirector] replaceScene:[Game scene]];
    }
}

Если я прокомментирую [self startGame: play];ошибка не появляется

Здесь появляется ошибка

CCTextureAtlas.m [Cocos 2d]

#if CC_TEXTURE_ATLAS_USE_TRIANGLE_STRIP
    glDrawElements(GL_TRIANGLE_STRIP, (GLsizei) n*6, GL_UNSIGNED_SHORT, (GLvoid*) (start*6*sizeof(indices_[0])) );
#else
    glDrawElements(GL_TRIANGLES, (GLsizei) n*6, GL_UNSIGNED_SHORT, (GLvoid*) (start*6*sizeof(indices_[0])) );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...