Ключевое слово, которое вы ищете, описывающее вашу проблему, - «Управление состоянием игры». На веб-сайте XNA есть несколько хороших статей, обязательно прочитайте это: http://create.msdn.com/en-US/education/catalog/sample/game_state_management
Теперь, чтобы ответить на ваш вопрос более прямо. Скажем, у вас есть 2 разных состояния
-Меню
-Game
Сначала создайте класс State с методами для настройки рисования и обновления правильных элементов пользовательского интерфейса.
Теперь создайте класс MenuState, производный от State, и переопределите методы setup, draw и update. В метод установки введите весь код для создания правильного меню. (Как Scene.MenuItems.Clear (); Scene.MenuItems.Add (новая метка (..)); и т. Д.). Сделайте то же самое для методов обновления и отрисовки (обновляйте и отрисовывайте каждый элемент управления, захватывайте события, передаваемые щелчками по кнопкам и т. Д.) *
Сделайте то же самое для GameState.
Теперь в вашем коде сцены сделайте поле «State state». Когда пользователь нажимает escape, установите состояние (новое) MenuState. Когда пользователь возвращается в игру, установите состояние (новое) GameState. В методах обновления и рисования сцены поместите вызов state.Update (..) и state.Draw (..). Поскольку вы переопределили эти методы в GameState и MenuState, будут выполнены правильные действия.
Этот подход решает проблему наличия элементов управления gazzillion, которые выполняют проверки вроде «if (scene.StateEnum == StateEnum.SomeState) {DoThis ();}». Вам будет легче управлять этим.
Также подумайте о создании других концептуальных классов. Как и у MenuState может быть подсостояние «Меню опций». Может быть, придумать форму класса и т.д ...