Является ли DrawableGameComponent неправильным инструментом для создания кнопок? - PullRequest
0 голосов
/ 24 февраля 2012

Я делаю игру по шаблону Управление состоянием игры . Я сделал 20 кнопок на 2-й странице, которые позволяют пользователю выбрать уровень.

 LevelButton : TexturedDrawableGameComponent

Внутри кнопки LoadContent () создаются и добавляются в коллекцию GameComponent. Если я правильно понял, GameCompoenent - это своего рода глобальная коллекция, поэтому, когда пользователь переходит с 4-й страницы на 2-е приложение, он добавляет еще 20 кнопок.

Я добавил цикл, который очищает все кнопки LevelButton из коллекции, но кажется, что это неправильно.

Является ли DrawableGameComponent неправильным инструментом для создания кнопок?

Ответы [ 2 ]

3 голосов
/ 24 февраля 2012

Да .

DrawableGameComponent и его друзья являются необязательными битами платформы XNA. Считай их помощниками. Простой пример реализации.

Если вам требуется больше или иная функциональность по сравнению с тем, что они предоставляют, вы должны заменить их собственной реализацией!

В этом случае кажется, что вам нужен объект "Button" (например, LevelButton), возможно, с такими методами, как Update и Draw.

И затем вам нужен какой-то объект «Контейнер кнопок», который будет содержать все эти кнопки и держать их нарисованными и обновленными, когда они будут на экране. Но не делайте с ними ничего, пока они находятся за кадром.

(Вы можете создать свой собственный экземпляр GameComponentCollection для управления этим и продолжать использовать игровые компоненты. Но вы все равно должны предоставить свою собственную логику отрисовки / обновления / загрузки / выгрузки / инициализации. Логика для Game.Components внутренний к Game и не подлежит повторному использованию. Я рекомендую просто использовать List - будьте проще!)

Альтернатива созданию нескольких коллекций - добавление и удаление (или отключение / включение) компонентов из глобальной коллекции - ужасно уродлива и подвержена ошибкам. Не делай этого.

0 голосов
/ 24 февраля 2012

Я думаю, что это не так, если он работает.

Может быть, вы можете подойти к этому несколькими более изящными способами или улучшить способ, которым вы это делаете ... но дело в том, что он должен работать.

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

Когда экран выбора уровня становится неактивным или уничтожен, наступает времяудалите кнопки.

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

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