Как добавить глобальный CCLayer, на который не влияют переходы сцены в Cocos2d? - PullRequest
1 голос
/ 14 октября 2011

Возможно ли добавить глобальный слой в Cocos2d, на который не влияют переходы сцены?

Как я вижу, она должна быть выше всех иерархий сцен.

На форуме Cocos2d есть старая и короткая дискуссия, но ответа нет: http://www.cocos2d -iphone.org / форум / тема / 8071

UPD. «под переходами сцены» я подразумеваю под «1010 * анимированные переходы сцены».

Ответы [ 3 ]

3 голосов
/ 18 мая 2012

Вы можете использовать свойство messagesNode CCDirector для размещения 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 голос
/ 14 октября 2011

Вы можете создать подкласс CCLayer и превратить его в одноэлементный. Вы добавляете его на сцену, как и любой другой дочерний узел.

Всякий раз, когда вы переходите из одной сцены в другую, вы можете удалить слой из старой сцены и добавить его в новую сцену как дочерний. Это будет работать только в том случае, если вы не используете анимацию перехода сцены.

Альтернатива состоит в том, чтобы не использовать метод CCDirector replaceScene, а вместо этого спроектировать приложение для запуска в виде единой сцены, которая никогда не меняется. Чтобы «подделать» изменение сцены, вы будете использовать два слоя, один глобальный слой и другой слой, который содержит ваши текущие узлы сцены. Если вы хотите выполнить переход, вы можете анимировать слой с помощью CCActions, чтобы, например, выскользнуть за пределы экрана при скольжении в новом слое с другой иерархией узлов. Все, что вы действительно теряете, - это удобство классов CCSceneTransition для анимации изменений сцены.

1 голос
/ 14 октября 2011

Мой кишечник говорит нет , мой мозг говорит возможно .

Документация гласит: «Рекомендуется использовать CCScene в качестве родителя всех ваших узлов».

Я не могу проверить это прямо сейчас, но, глядя на диаграмму наследования CCNode, похоже, что логика CCNode и CCScene отличается только точкой привязки. Таким образом, вы можете создать CCLayer для использования в качестве корневого слоя и добавить к нему двух дочерних элементов - корень CCScene и CCLayer для вашего графического интерфейса пользователя (с более высоким порядком Z).

Тем не менее, переходы между сценами могут быть хитрыми, как вы обычно называете CCDirector replaceScene, что работает с корневой сценой, которую вы ей даете. Если вы дадите ему CCScene дочерний элемент вашего корня CCLayer, он может не нарисовать CCLayer и его дочерний графический интерфейс. Если вы дадите ему корень CCLayer, вы окажетесь в той же ситуации, что и раньше.

Я бы все равно попробовал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...