Странное поведение при переходе разных сцен

Я надеюсь сделать какую-то собственную картинку (например, логотип и информацию разработчика игры) до запуска игры. В храме cocos2d есть только IntroLayer для показа логотипа, поэтому я решаю добавить еще сцену для отображения другой информации перед входом в игру. Главное меню игры. В IntroLayer.h

//this is the template code    
@interface IntroLayer : CCLayer
{
}

+(CCScene *) scene;

@end

//this is the new scene,I hope to display after the IntroLayer
@interface SecondScene : CCLayer
{
}

+(CCScene*) scene;

@end

//In IntroLayer.m
@implementation IntroLayer

//I change the replaceScene function from [HelloWorldLayer node] to[SecondScene scene]
-(void) onEnter
{
    [super onEnter];
    [[CCDirector sharedDirector] replaceScene:
     [CCTransitionFade transitionWithDuration:1.0 scene:[SecondScene scene]]];
}
@end

@implementation SecondScene

+(CCScene*)scene
{
    CCScene *scene = [CCScene node];
    SecondScene *layer = [SecondScene node];
    [scene addChild:layer];
    return scene;
}

-(id)init
{
    if (self = [super init]) {
        CGSize size = [[CCDirector sharedDirector] winSize];
        CCSprite *background = [CCSprite spriteWithFile:@"LOGO.png"];
        background.position = ccp(size.width/2, size.height/2);
        [self addChild: background];
    }
    return  self;
}

//I hope the main game scene display after the SecondScene
-(void)onEnter{
    [[CCDirector sharedDirector] replaceScene:
     [CCTransitionFade transitionWithDuration:1.0 scene:[HelloWorldLayer scene]]];
    [super onEnter];
}

@end

Но когда я запустил этот код, я обнаружил, что он работает не так, как я ожидал. SecondScene и HelloWorldLayer отображаются почти одновременно, на самом деле, наконец, на экране остается только SecondScene, и HelloWorldLayer быстро исчезает. Я действительно может кто-то дать совет? Действительно спасибо за это.

1 ответ

Если вы хотите, чтобы второй переход следовал за первым, вам нужно переопределить onEnterTransitionDidFinish метод:

-(void)onEnterTransitionDidFinish{
    [super onEnterTransitionDidFinish];
    [[CCDirector sharedDirector] replaceScene:
     [CCTransitionFade transitionWithDuration:1.0 scene:[HelloWorldLayer scene]]];
}
Другие вопросы по тегам