Роль сцены - PullRequest
       31

Роль сцены

1 голос
/ 11 декабря 2011

Какова роль сцены в Cocos2d?

Сцена создает слои, как, например, GameEngineLayer, HUDLayer и т. Д.

Я думаю, класс GameEngineLayer может быть идентичен междусцены, но в разных сценах могут быть разные объекты.

В сцене 1 может быть один Санта и один Рудольф, тогда как в сцене 2 только два Санта.Должен ли scene1 создать экземпляр santa и одного рудольфа и передать их в списке игровых объектов своему экземпляру gameEngine?И сцена два создает два экземпляра Санты по одному и тому же шаблону?

Должны ли сцены также передавать список событий в соответствующий экземпляр gameEngine с событиями с метками времени?Например, что Санта будет кормить Рудольфа через минуту?

Является ли ответственность сцены делать подобные вещи?

Я начал с игры cocos2d / box2d неделю назад, поэтому я новичок.Я прочитал много примеров, но они обычно кодируют все в классе HelloWorldLayer.:)

Добавлен пример: http://www.raywenderlich.com/4666/how-to-create-a-hud-layer-with-cocos2d Сцена определена внутри ActionLayer.mm.Зачем??Почему бы не иметь Scene1.m, который создает экземпляр ActionLayer?

1 Ответ

0 голосов
/ 12 декабря 2011

Единственная причина наличия CCScene в cocos2d состоит в том, что CCDirector требует его в качестве базового класса для таких методов, как runWithScene и replaceScene.Кроме того, CCScene, CCLayer и CCNode практически идентичны друг другу.

Вы можете назначить сцены, слои, узлы, спрайты и т. Д. На любую роль, какую захотите.

Но обычно Сцена принимает на себя роль диспетчера состояний текущих активных игровых объектов (узлов),Обычный вариант использования - объявить сцену синглтоном, чтобы любой дочерний узел мог получить доступ к базовым методам сцены, например, для отправки сообщений другим несвязанным узлам или для проверки завершения игры и т. Д.

Для распространения событий я поддерживаю передачу событий вниз, поскольку нет простого способа передачи событий, как в UIKit.Однако это зависит от того, какие события и какой тип дизайна вы предпочитаете.

Отправляет ли Санта сообщение Рудольфу, чтобы его накормить, или Рудольф часто спрашивает Санту, есть ли у него что-нибудь поесть, такжевам решать.У обоих подходов есть свои плюсы и минусы.

Причина, по которой во многих примерах создается экземпляр объекта CCScene внутри класса CCLayer, заключается просто в том, что Cocos2D требует наличия сцены.Лично я считаю, что это плохой пример плохого примера, который стал стандартом де-факто за эти годы.Было бы лучше всегда создавать класс CCScene, а внутри него создавать все слои и другие нужные вам узлы.Это сделало бы связь между сценами и слоями и другими узлами более очевидной.На самом деле, существует много проектов, класс сцены которых просто делает только один слой, который выполняет весь код.

...