Должен ли каждый экран пользовательского интерфейса содержать список экранов в стеке или я должен использовать класс менеджера?

У меня есть класс Screen, который инкапсулирует обновление и рендеринг нескольких различных состояний, таких как меню, игровой процесс и кредиты. Существует стекэкранов, на которых сами экраны должны иметь возможность выдвигать новые и поп-экраны (представьте, что вы выбрали «Начать игру» из главного меню, нажав экран игрового процесса и нажав экран главного меню).

У меня мог бы быть класс ScreenManager для babysit моих экранов, но это в основном просто обертка вокруг списка. Поэтому я рассматриваю возможность пропускать каждый экран std::list<Screen*> _screens и заставить их нажимать и удалять по своему усмотрению. Я беспокоюсь о том, что на это наложено копирование этого списка. Если я правильно помню, так как список содержит указатели на экраны, единственное, что я буду копировать, это список указателей, правильно? И не сами экраны сами.

Будет ли это целесообразным способом, или вы бы рекомендовали создать «класс-оболочку», например, ScreenManager в любом случай?

3 голоса | спросил Laurens 27 TueEurope/Moscow2011-12-27T20:29:55+04:00Europe/Moscow12bEurope/MoscowTue, 27 Dec 2011 20:29:55 +0400 2011, 20:29:55

2 ответа


2

Поскольку указатели действуют только как ссылки на адреса, вы будете копировать только эти адреса, а не сами экраны.

Лично , я предпочитаю иметь ScreenManager просто потому, что менеджер может использоваться не просто удерживая экраны. Например, что, если бы я хотел найти всех врагов, которые тянутся к данному Screen? Вместо того, чтобы делать некоторые причудливые проверки встроенных, я мог бы просто создать функцию, которая возвращает все объекты определенного типа из некоторого Screen внутри ScreenManager. В конце концов, выбор между простым списком и менеджером зависит от того, насколько сложна игра, которую вы делаете.

ответил Mike Cluck 27 TueEurope/Moscow2011-12-27T21:13:30+04:00Europe/Moscow12bEurope/MoscowTue, 27 Dec 2011 21:13:30 +0400 2011, 21:13:30
2

Как отметил мой предыдущий оратор, я также предпочел бы ScreenManager по тем же причинам.

Если вы действительно хотите продолжить с добавлением списка в свой класс Screen, я бы использовал указатель на список с должен быть только один экземпляр (например, singleton pattern, что является еще одним аргументом для класса ScreenManager)

Параллелизм - это еще одна проблема, которую вы должны знать при построении этой логики в классе Screen. Например. ScreenManager моего движка пробегает все Screens и вызывает метод Update для каждого Screen. Возможно, что Screen выталкивает себя из стека в Update, который разбивает логику итератора в классе ScreenManager. Довольно легко исправить, если есть только одно место, чтобы посмотреть ...

ответил PrinceCharles 27 TueEurope/Moscow2011-12-27T21:37:55+04:00Europe/Moscow12bEurope/MoscowTue, 27 Dec 2011 21:37:55 +0400 2011, 21:37:55

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132