是否可以在Cocos2d中添加不受场景转换影响的全局图层?
正如我所看到的,它应该高于所有场景层次结构。
在Cocos2d论坛上有一个古老而简短的讨论,但没有答案: http://www.cocos2d-iphone.org/forum/topic/8071
UPD。 '通过场景转换'我的意思是'通过动画场景转换'。
答案 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
的继承图,看起来CCNode
和CCScene
的逻辑只有锚点不同。因此,您可以创建一个CCLayer
作为根层,并为其添加两个子项 - 一个根CCScene
和一个CCLayer
用于您的GUI(具有更高的值) Z命令。
但是,场景转换可能仍然很棘手,因为您通常会调用CCDirector replaceScene
,它会根据您提供的根场景进行操作。如果您为其CCScene
提供CCLayer
子项,则可能无法绘制CCLayer
及其GUI子项。如果你给它根CCLayer
,那你和以前一样。
我还是试一试。
答案 2 :(得分:1)
您可以创建CCLayer子类并将其转换为单例。您可以像任何其他子节点一样将其添加到场景中。
每当您从一个场景转换到另一个场景时,您就可以从旧场景中删除该图层,并将其作为子场添加到新场景中。这仅在您不使用场景转换动画时才有效。
另一种方法是不使用CCDirector replaceScene方法,而是将您的应用程序设计为一个永不改变的单个场景。要“伪造”场景的更改,您将使用两个图层,一个全局图层和另一个包含当前场景节点的图层。如果要转换,可以使用CCActions为图层设置动画,例如,在具有不同节点层次结构的新图层中滑动时滑出屏幕。你真正失去的就是CCSceneTransition类为动画场景变化提供了便利。