Cocos2d PushScene和CCFadeTransition可以在没有调度程序的情况下一起正常工作吗?

时间:2013-11-22 00:30:17

标签: cocos2d-iphone

有这样一个原因,当你以这种方式使用CCTransitionFade时。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

 [director_ pushScene:[CCTransitionFade transitionWithDuration:1 
 scene:[FirstScene node]]];

 return YES;

}

然后第二个场景在FirstScene的init内被调用,以便像游戏的常规品牌展示一样前进,为什么如果我没有放置比第一个CCTransitionFade定时器稍长的调度程序为什么呢?卡住?

//in FirstScene Class
-(void) onEnter {

self = [super init];
if (self) {

   [[CCDirector sharedDirector] replaceScene:
   [CCTransitionFade transitionWithDuration:1.2 scene:[SecondScene node]]];
  }
 return self;
}

我的意思是我理解其中的原因,但这是否意味着我一直在以错误的方式做到这一点?是否有更可接受的方式来执行此CCTransitionFades,或者以这种方式使用调度程序是否正确?

//in FirstScene Class

- (void)onEnter {

self = [super init];
if (self) {

  [self scheduleOnce:@selector(makeTransition:) delay:1.2];

 }
 return self;
}


-(void)makeTransition:(ccTime)dt {


      [[CCDirector sharedDirector] replaceScene:
      [CCTransitionFade transitionWithDuration:1 scene:[SecondScene node]]];

}

通过使用SchedulerOnce的第二种方式,我能够成功地得到我想要的东西。

所以,我做错了什么?这只是我身边的一个不好的解决方法吗?或者这种情况有正确的方法吗?

注意:进行了更正,因为目前我确实拥有onEnter方法的代码。但是我已经尝试过使用init,它确实也有相同的行为。

1 个答案:

答案 0 :(得分:0)

在第一种情况下,当你从init调用replaceScene时,调用函数的顺序看起来像这样:

  • (BOOL)应用程序:(UIApplication *)应用程序didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

  • [FirstScene node]

  • FirstSceneInit
  • [[CCDirector sharedDirector] replaceScene:..
  • ...
  • [director_ pushScene

    问题是因为你在屏幕上没有场景时调用replaceScene,所以导演尝试更改实际场景,这对于FirstScene是NULL。在pushScene

  • 之后,第一个场景出现在屏幕上

在第二个主要工作,但理论上这个解决方案是危险的,因为当你调用init并设置调度程序时,那么例如可以是2秒滞后。我不知道这可能在cocos2d上运行,它在一个线程中运行,但我认为在onEnter函数中放置替换场景是更优雅的解决方案