有这样一个原因,当你以这种方式使用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,它确实也有相同的行为。
答案 0 :(得分:0)
在第一种情况下,当你从init调用replaceScene时,调用函数的顺序看起来像这样:
(BOOL)应用程序:(UIApplication *)应用程序didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
[FirstScene node]
[director_ pushScene
问题是因为你在屏幕上没有场景时调用replaceScene,所以导演尝试更改实际场景,这对于FirstScene是NULL。在pushScene
在第二个主要工作,但理论上这个解决方案是危险的,因为当你调用init并设置调度程序时,那么例如可以是2秒滞后。我不知道这可能在cocos2d上运行,它在一个线程中运行,但我认为在onEnter函数中放置替换场景是更优雅的解决方案