Cocos2d iphone 如何在Cocos2d中添加不受场景变换影响的全局CCLayer?
是否可以在Cocos2d中添加不受场景变换影响的全局层 正如我所看到的,它应该在所有场景层次之上 Cocos2d论坛上有一个古老而简短的讨论,但没有答案:Cocos2d iphone 如何在Cocos2d中添加不受场景变换影响的全局CCLayer?,cocos2d-iphone,Cocos2d Iphone,是否可以在Cocos2d中添加不受场景变换影响的全局层 正如我所看到的,它应该在所有场景层次之上 Cocos2d论坛上有一个古老而简短的讨论,但没有答案: UPD。”“我所说的场景变换”是指“动画场景变换”。我的直觉说不,我的大脑说可能 文档中说,“将CCScene用作所有节点的父节点是一种很好的做法。” 我现在无法测试这一点,但是查看CCNode的继承关系图,它看起来像CCNode和CCScene的逻辑只因锚点不同而不同。因此,您可以创建一个CCLayer用作根层,并向其中添加两个子层-一个
UPD。”“我所说的场景变换”是指“动画场景变换”。我的直觉说不,我的大脑说可能 文档中说,“将CCScene用作所有节点的父节点是一种很好的做法。” 我现在无法测试这一点,但是查看
CCNode
的继承关系图,它看起来像CCNode
和CCScene
的逻辑只因锚点不同而不同。因此,您可以创建一个CCLayer
用作根层,并向其中添加两个子层-一个根CCScene
,一个用于GUI的CCLayer
(Z顺序更高)
但是,场景转换可能仍然很棘手,因为您通常称之为CCDirector replaceSecene
,它适用于您提供的根场景。如果给它根CCLayer
的CCScene
子对象,它可能不会绘制CCLayer
及其GUI子对象。如果给它根CCLayer
,则情况与以前相同
我还是会尝试一下。我的肠子说不,我的大脑说可能 文档中说,“将CCScene用作所有节点的父节点是一种很好的做法。” 我现在无法测试这一点,但是查看
CCNode
的继承关系图,它看起来像CCNode
和CCScene
的逻辑只因锚点不同而不同。因此,您可以创建一个CCLayer
用作根层,并向其中添加两个子层-一个根CCScene
,一个用于GUI的CCLayer
(Z顺序更高)
但是,场景转换可能仍然很棘手,因为您通常称之为CCDirector replaceSecene
,它适用于您提供的根场景。如果给它根CCLayer
的CCScene
子对象,它可能不会绘制CCLayer
及其GUI子对象。如果给它根CCLayer
,则情况与以前相同
我仍然会尝试一下。您可以创建一个CCLayer子类并将其转换为单例。将其添加到场景中,与其他任何子节点一样 无论何时从一个场景过渡到另一个场景,都可以从旧场景中删除该层,并将其作为子场景添加到新场景中。仅当不使用场景过渡动画时,此选项才有效
另一种方法是不使用CCDirector ReplaceSecene方法,而是将应用程序设计为作为一个永不更改的单一场景运行。要“伪造”场景的更改,您将使用两个层,一个全局层和另一个包含当前场景节点的层。如果要转换,可以使用C动作设置层的动画,例如,滑出屏幕,同时滑入具有不同节点层次的新层。您真正失去的是CCSceneTransition类为场景更改设置动画的便利性。您可以创建一个CCLayer子类并将其转换为单例。将其添加到场景中,与其他任何子节点一样 无论何时从一个场景过渡到另一个场景,都可以从旧场景中删除该层,并将其作为子场景添加到新场景中。仅当不使用场景过渡动画时,此选项才有效
另一种方法是不使用CCDirector ReplaceSecene方法,而是将应用程序设计为作为一个永不更改的单一场景运行。要“伪造”场景的更改,您将使用两个层,一个全局层和另一个包含当前场景节点的层。如果要转换,可以使用C动作设置层的动画,例如,滑出屏幕,同时滑入具有不同节点层次的新层。您真正失去的是CCSCenetTransition类为场景更改设置动画的便利性。您可以使用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)
它用于通知目的(广告等),因此我不建议尝试从该节点执行任何过于花哨的操作。您可以使用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)
它用于通知目的(广告等),因此我不建议尝试从该节点执行任何过于花哨的操作。谢谢!我也这么认为,但在尝试修补CCDirector类以满足我的需要之前,我需要指出:)谢谢!我也这么认为,但在尝试修补CCDirector类以满足我的需要之前,我需要指出:)