Предыдущая Следующая
353
21.5.1. Создаем объекты для меню и заставок
Для вывода на экран меню и заставок нам необходимо в классе Game1 объявить объекты классов SplashScreen, MenuGame, HelpScreen, AboutScreen и BooksScreen .
private SplashScreen splash; private MenuGame menuGame; private HelpScreen help; private AboutScreen about; private BooksScreen books;
А затем и создать эти объекты.
splash = new SplashScreen(); menuGame = new MenuGame(); help = new HelpScreen(); about = new AboutScreen(); books = new BooksScreen();
После чего в методе Initialize() класса Game1 мы можем спокойно вызывать соответствующие методы классов SplashScreen, MenuGame, HelpScreen, AboutScreen и BooksScreen для загрузки в игру графики.
splash.InitializeSplashScreen(content, screenWidth, screenHeight); menuGame.InitializeMenuGameScreen(content, screenWidth, screenHeight); help.InitializeHelpScreen(content, screenWidth, screenHeight); about.InitializeAboutScreen(content, screenWidth, screenHeight); books.InitializeBooksScreen(content, screenWidth, screenHeight);
21.5.2. Обновляем состояние игры в методе Update()
Обработка нажатия кнопки А в меню и титульной заставке, а также обработка GamePadDPad для перехода по меню - это основная и самая главная проблема, которую нам нужно решить. Дело в том, что любое нажатие кнопки на джойстике и ее удерживание ведет к цикличному выполнению определенного условия, назначенного на эту клавишу. Например, посмотрите на блок кода, приведенный ниже.
if(currentState.Buttons.A == ButtonState.Pressed)
{
state += 1;
}
Если создать такое условие, то нажатие кнопки А и ее удерживание ведет к постоянному увеличению переменной state. И даже если вы нажмете кнопку и моментально ее отпустите, совсем не факт, что вы отпустили эту кнопку в тот момент, когда переменная увеличится всего на одну единицу. Любая задержка на-
354 Последние штрихи
жатия кнопки А ведет к увеличению переменной state, и проследить значение этой переменной и тем более управлять ею просто не возможно.
В связи с этим необходимо создать условие, которое вне зависимости от длительности нажатия и удерживания кнопки А (в данном случае) увеличивало бы переменную state ровно на одну единицу.
Чтобы приведенный выше код работал корректно, а переменная state изменялась ровно на одну единицу за одно нажатие кнопки А, можно использовать следующую конструкцию кода.
bool aReleased = true;
protected override void Update(GameTime gameTime) { Предыдущая Следующая
|