0

replaceScene:使用 a调用CCSceneon CCDirectorwhich is during aCCTransition会导致在dealloc使用的任何场景上都不会被调用,此外,在此操作之后不会显示任何场景。

这是示例项目的链接

获得这种行为的最短方法是这样的方法(我的意思是重现问题):

 SceneOne *destScene = [SceneOne node];
CCTransitionFade *transition = [[CCTransitionFade alloc]initWithDuration:2 scene:destScene];
[[CCDirector sharedDirector]replaceScene:transition];
double delayInSeconds = 1.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
    [[CCDirector sharedDirector]replaceScene:[SceneTwo node]];
});

我的问题是:是否有任何可行的方法来替换CCTransition正在执行的场景CCDirector

我已经实现了一个委托回调,CCDirector通知我结束场景替换,但是如果我在CCTransition.

如果答案是否定的,是否有 cocos2d-iphone 方法来实现下述目标?

本来这个问题是在我想在applicationDidEnterBackground(作为后台任务)或者的时候添加“加载场景”的时候出现的applicationWillEnterForeground,但是我意识到这与后台执行无关。我的最终目标是在游戏等待调用 Game Center 身份验证处理程序时提供无缝的用户体验,并且从后台唤醒应用程序一开始就显示“加载场景”就足够了(不仅阻止用户交互可以通过多种方式完成,但不会向用户显示以前的游戏 UI)。然而,这个解决方案很容易受到上述问题的影响——如果用户在场景转换期间点击主页按钮,他将在从后台运行游戏后得到一个非常奇怪的屏幕。

编辑:经过更多研究后,我没有找到任何令人满意的解决方案来替换场景CCTransition,但是,上述问题通过不调用而是通过向可见replaceScene添加“加载”来解决,正如@LearnCocos2D(感谢Steffen)所建议的那样。这并不完美,因为在场景转换过程中添加一个孩子在出现奇怪结果时仍然会有一些狭窄的窗口(在运行时间的意义上),但它比替换场景要好得多。我想提一下,它只在我在 3GS 上测试我的游戏时才关心,因为较新的设备明显更快,并且很难重现在比 3GS 更快的东西上单击“主页按钮”的问题。CCLayerCCSceneCCTransition

4

0 回答 0