2012-03-17 3 views
0

В двигателе cocos2d существует способ добавления объекта в качестве дочернего элемента другого.Добавление детей в Cocos2d

Так, например, в этой строке кода в файле Game.m:

CCMenu *menu = [CCMenu menuWithItems:pauseButton, nil]; pauseButton.position = ccp(s.width/2 - pauseButton.contentSize.width/2, (-s.height/2) + pauseButton.contentSize.height/2); [self addChild:menu z:100];

Вы можете увидеть экземпляр меню CCMenu добавляется как ребенок к объекту класса игры. Что это на самом деле? Это для целей памяти?

ответ

1

Этот вид иерархической системы помогает организовывать и ссылаться на ваши игровые компоненты. И покажите их.

Game.m - это ваша сцена, и она будет отображать элементы вашей игры. Однако он понятия не имеет, каковы эти элементы. Таким образом, у сцены есть список детей, и она будет «отображать» их (спрайты, кнопки, метки и т. Д.). Таким образом, вы добавляете ребенка в сцену, чтобы указать, что этот ребенок должен отображаться, потому что это визуальный элемент.

1

Какао и Qt также используют эту иерархию, где вы можете добавить один вид в качестве ребенка в другое представление. Это не имеет никакого отношения к использованию памяти, главная цель - иметь четкий порядок ответственности (в цепочке Cocoa: responder).

В пользовательских интерфейсах нижние представления получают первый шанс реагировать на ввод пользователя. Если представление не реагирует на ввод пользователя, оно передаст ответственность своему родителю. Однако в Cocos2D это не используется, и в основном это система, которая позиционирует узлы друг относительно друга и объединяет узлы вместе, чтобы все они были нарисованы на одном и том же «глубинном слое».

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

Смежные вопросы