2010-08-23 2 views
4

Если у вас есть приложение с графическим интерфейсом, полностью работающим над 2D-рисунком, какая должна быть лучшая практика для обработки того, что нужно рисовать и куда прикасаться?Наилучшая практика: шаблон проектирования для 2D-навигации на экране HUD

Пример для лучшего понимания:
У меня есть игра с картой. На этой карте я могу строить дома и прочее.
У меня также есть информационная панель, которая может быть расширена. На расширенном баре я рисую некоторую информацию об игре, а также предлагает интерфейс для изменения разных значений. Если возникает прикосновение, я должен проверить, расширена ли информационная панель или нет, чтобы определить, хочу ли я что-то изменить на карте или что-то на панели.

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

Так что в основном вопрос: является ли шаблон состояния (от GoF) наилучшей практикой для обработки чистого графического интерфейса?

ответ

2

Как обычно это работает, пользовательский интерфейс является деревом объектов Control. Каждый элемент управления имеет некоторый ограничивающий прямоугольник и потенциально несколько дочерних элементов управления, которые плавают над ним. Когда происходит щелчок, дерево идет сверху вниз (что означает детей перед родителями и братьев и сестер в порядке). Для каждого элемента управления вы видите, пересекает ли точка его ограничивающий прямоугольник. Если да, дайте элементу управления возможность обработать щелчок (т. Е. Какой-нибудь виртуальный метод OnClick). Если это так, прекратите обработку, этот клик будет выполнен. В противном случае, продолжайте идти, пока не дойдете до элемента управления, который справится с этим.

+0

Это то, что я сделал, чтобы создавать и размещать вещи на карте, но это не полный ответ для меня. Как насчет состояний, которые определяют, если ограничивающая ячейка даже активна? В вашем случае я должен обрабатывать несколько состояний для каждого объекта управления. В настоящее время я пытаюсь адаптировать шаблон активности android для моего случая. Каждый отдельный «экран» имеет свою собственную реализацию состояния с помощью 'onTouch(), onDraw(), onStateChange()' – WarrenFaith

+0

. Большинство систем пользовательского интерфейса также будут иметь «видимые» или «разрешенные» состояния, которые могут быть установлены для данного виджета. Отключение его предотвратит получение кликов. После этого хост сохраняет это включенное состояние синхронно с фоновым игровым состоянием, которое влияет на него. Системы событий могут помочь там. – munificent

+0

это звучит лучше ... Я постараюсь реализовать его таким образом. спасибо – WarrenFaith

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