netlib.narod.ru< Назад | Оглавление | Далее >

Глава 10. Получение данных от игрока и пользовательский интерфейс

Эта глава подробнее рассматривает класс Input, который мы использовали уже много раз. Затем мы обсудим способы реализации хорошего графического интерфейса пользователя (GUI) для XNA Shooter. Обработка пользовательского ввода в XNA очень проста, поскольку благодаря пространству имен Input, вы можете легко получить состояние мыши, клавиатуры и игрового пульта с помощью всего трех строк кода:

mouseState = Mouse.GetState();
keyboardState = Keyboard.GetState();
gamePadState = GamePad.GetState(PlayerIndex.One);

Если пространство имен XNA Input не добавлено к файлу с которым вы в данный момент работаете, наведите текстовый курсор на Mouse, Keyboard или GamePad и нажмите Ctrl и +, что автоматически добавит к вашим директивам using следующую строку:

using Microsoft.Xna.Framework.Input;

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

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

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

Та же самая логика применима и к классу Input. Преимущества не так очевидны, но через некоторое время вы заметите, что написание нового кода UI (пользовательского интерфейса) для ваших нестандартных кнопок или управляющих элементов меню, становится намного проще благодаря множеству вспомогательных классов, включенных в класс Input.

Просто писать вспомогательные классы немного скучно, и вы уже знаете, как использовать класс Input, поскольку применяли его уже много раз. Чтобы получить что-нибудь полезное для вашей следующей игры, XNA Shooter, вы также запрограммируете все классы UI и увидите логику меню для более сложных игр, показанных в этой книге. Идея заключается в повторном использовании существующих классов игровых экранов Rocket Commander XNA для новых проектов. Некоторые классы должны быть удалены и вы, возможно, то здесь то там будете нуждаться в новом классе, но общая логика программы остается практически одинаковой.

Игра сама показывает пользовательский интерфейс (амуницию, здоровье, очки и т.д.) в классе Mission, точно так же, как делает Rocket Commander. Для более сложных игр, аналогичных гоночной игре из следующей части этой книги, игровая логика и код визуализации UI разделены на большее количество классов. Подобно тестовым модулям, вы всегда должны убеждаться, что пишете ваш игровой код так просто, насколько возможно, но не проще. Не имеет смысла писать 30 вспомогательных классов, если вам надо только вывести на экран текст «Hello World».

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


netlib.narod.ru< Назад | Оглавление | Далее >

Сайт управляется системой uCoz