Я разрабатываю приложение для XBox, используя XNA, с пользовательским интерфейсом.
Для этого я разработал систему навигации, система навигации работает следующим образом:
Система существует из страниц, каждая страница содержит дочерние элементы пользовательского интерфейса, которые все имеют
один или несколько PageTabs, как я их назвал.
Вкладки - это объекты, имеющие 2 свойства, X и Y.
(Я знаю, что мог бы использовать Point, но у класса pagetab также есть некоторые методы)
Исходя из текущего состояния системы, я проверяю входные данные и генерирую события для элементов с правой страницей.
Итак, у меня есть этот массив:
страницы [] {
Начните,
Выход,
Настройки,
...}
Затем я использую перечисление для своего состояния, например, Пуск, и получаю доступ к элементам навигации на странице, например:
страниц [Start] .Navigatables []
Это массив, содержащий все вкладки страницы. Когда вы понижаетесь, Y увеличивается, и наоборот. То же самое для X
Это прекрасно работает, учитывает максимальные и минимальные значения Y & X, поэтому что-то всегда выбирается.
Однако у этой системы есть один существенный недостаток: она может вводить данные только для одного состояния.
Но скажем, я, например, на стартовой странице,
Итак, мое состояние - «Пуск», и у меня есть всплывающее окно с 2 кнопками, ярлыками страниц:
(1,1) и (2,1)
Система в том виде, в котором она в настоящее время разработана, будет искать ВСЕ элементы в текущем состоянии с выбранной страницей, но мне нужно сделать так, чтобы, если всплывающее окно было видимым, только всплывающее окно принимало навигацию, а все остальное выиграло ' t реагирует на ввод пользователя (геймпад).
Я думал о добавлении дополнительного List к классу PageTab, который содержит «подсостояния», в которые элемент может принимать входные данные, но должен быть лучший способ, не так ли?
Надеюсь, я объяснил это достаточно хорошо, если вам нужна дополнительная информация, я буду рад предоставить ее.