如何在Cocos2d中添加不受场景转换影响的全局CCLayer?

时间:2011-10-14 07:47:27

标签: cocos2d-iphone

是否可以在Cocos2d中添加不受场景转换影响的全局图层?

正如我所看到的,它应该高于所有场景层次结构。

在Cocos2d论坛上有一个古老而简短的讨论,但没有答案: http://www.cocos2d-iphone.org/forum/topic/8071

UPD。 '通过场景转换'我的意思是'通过动画场景转换'。

3 个答案:

答案 0 :(得分:3)

您可以使用CCDirector的notificationNode属性放置一个CCNode(即.CCLayer,CCLabel等),即使在转换过程中也会保留在场景之上。像这样:

CCLayer *layer = [CCLayer node];
CCLabelTTF *label = [CCLabelTTF labelWithString:@"Test" fontName:@"Marker Felt" fontSize:32];
[layer addChild:label];
[[CCDirector sharedDirector] setNotificationNode:layer]; // Layer should be placed here
[layer onEnter]; // Schedule for updates (ie. so that CCActions will work)

这是出于通知目的(广告等),因此我不建议尝试从此节点做任何过于花哨的事情。

答案 1 :(得分:1)

我的直觉没有,我的大脑说可能

文档说“使用CCScene作为所有节点的父节点是一种很好的做法。”

我现在无法对此进行测试,但查看CCNode的继承图,看起来CCNodeCCScene的逻辑只有锚点不同。因此,您可以创建一个CCLayer作为根层,并为其添加两个子项 - 一个根CCScene和一个CCLayer用于您的GUI(具有更高的值) Z命令。

但是,场景转换可能仍然很棘手,因为您通常会调用CCDirector replaceScene,它会根据您提供的根场景进行操作。如果您为其CCScene提供CCLayer子项,则可能无法绘制CCLayer及其GUI子项。如果你给它根CCLayer,那你和以前一样。

我还是试一试。

答案 2 :(得分:1)

您可以创建CCLayer子类并将其转换为单例。您可以像任何其他子节点一样将其添加到场景中。

每当您从一个场景转换到另一个场景时,您就可以从旧场景中删除该图层,并将其作为子场添加到新场景中。这仅在您不使用场景转换动画时才有效。

另一种方法是不使用CCDirector replaceScene方法,而是将您的应用程序设计为一个永不改变的单个场景。要“伪造”场景的更改,您将使用两个图层,一个全局图层和另一个包含当前场景节点的图层。如果要转换,可以使用CCActions为图层设置动画,例如,在具有不同节点层次结构的新图层中滑动时滑出屏幕。你真正失去的就是CCSceneTransition类为动画场景变化提供了便利。