Странное поведение при переходе разных сцен
Я надеюсь сделать какую-то собственную картинку (например, логотип и информацию разработчика игры) до запуска игры. В храме 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]]];
}