Xbox XNA Навигационная логика для пользовательского интерфейса - PullRequest
0 голосов
/ 03 марта 2012

Я разрабатываю приложение для XBox, используя XNA, с пользовательским интерфейсом. Для этого я разработал систему навигации, система навигации работает следующим образом:

Система существует из страниц, каждая страница содержит дочерние элементы пользовательского интерфейса, которые все имеют один или несколько PageTabs, как я их назвал.

Вкладки - это объекты, имеющие 2 свойства, X и Y. (Я знаю, что мог бы использовать Point, но у класса pagetab также есть некоторые методы)

Исходя из текущего состояния системы, я проверяю входные данные и генерирую события для элементов с правой страницей. Итак, у меня есть этот массив: страницы [] { Начните, Выход, Настройки, ...}

Затем я использую перечисление для своего состояния, например, Пуск, и получаю доступ к элементам навигации на странице, например:

страниц [Start] .Navigatables []

Это массив, содержащий все вкладки страницы. Когда вы понижаетесь, Y увеличивается, и наоборот. То же самое для X

Это прекрасно работает, учитывает максимальные и минимальные значения Y & X, поэтому что-то всегда выбирается.

Однако у этой системы есть один существенный недостаток: она может вводить данные только для одного состояния. Но скажем, я, например, на стартовой странице, Итак, мое состояние - «Пуск», и у меня есть всплывающее окно с 2 кнопками, ярлыками страниц: (1,1) и (2,1)

Система в том виде, в котором она в настоящее время разработана, будет искать ВСЕ элементы в текущем состоянии с выбранной страницей, но мне нужно сделать так, чтобы, если всплывающее окно было видимым, только всплывающее окно принимало навигацию, а все остальное выиграло ' t реагирует на ввод пользователя (геймпад).

Я думал о добавлении дополнительного List к классу PageTab, который содержит «подсостояния», в которые элемент может принимать входные данные, но должен быть лучший способ, не так ли?

Надеюсь, я объяснил это достаточно хорошо, если вам нужна дополнительная информация, я буду рад предоставить ее.

Ответы [ 2 ]

0 голосов
/ 26 апреля 2012

Я пошел с дополнительным подходом Z-индекса.Использование другого Z-индекса для некоторых элементов и перехват этого ввода работает как шарм.Я также добавил флаг: IndependentNavigation, который гарантирует, что некоторые элементы не зависят от Z-индекса (так что можно щелкнуть где-нибудь в другом месте, например, при открытии раскрывающегося списка)

0 голосов
/ 27 марта 2012

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

...