Создание приложения XNA
Основные теоретические сведения
Программы XNA всегда выполняют какие-либо действия: обновляют игровой мир и перерисовывают экран. Вместо ожидания ввода от устройства, игра XNA проверяет устройства, в которых, возможно, пользователь выполнил ввод, и используют их, чтобы обновить игровую модель и как можно быстрее перерисовать экран. В контексте игры это имеет большое значение. В XNA игровой мир всё время обновляется вокруг игрока, а не игрок инициирует действия.
При запуске игры XNA фактически выполняются следующие действия:
- Загрузка всех необходимых для игры ресурсов. Сюда входят все звуки, текстуры и модели, необходимые для создания игровой среды.
- Периодический запуск игрового движка:
- обновление игрового мира: получение информации с контроллеров ввода, обновление состояния и положения игровых элементов;
- отрисовка игрового мира: обновление информации в игровом мире, который может быть двух- или трёхмерным в зависимости от типа игры.
Эти действия выполняются в трёх методах класса Game, который создаёт Visual Studio как часть нового проекта игры.
partial class Game1 : Microsoft.Xna.Framework.Game { protected override void LoadContent(bool loadAllContent) { } protected override void Update(GameTime gameTime) { } protected override void Draw(GameTime gameTime) { } }
При создании игры нужно добавить в эти методы программный код. Эти методы XNA автоматически вызывает во время работы игры. Метод LoadContent вызывается при запуске игры. Метод Draw вызывается настолько часто, насколько это возможно, а метод Update вызывается с частотой 30 раз в секунду, в отличие от версии игр для компьютеров и Xbox 360, где этот метод вызывается 60 раз в секунду, что позволяет уменьшить потребление электроэнергии.
Для управления игровыми объектами можно использовать сенсорный экран. Для взаимодействия с сенсорным экраном используется класс TouchPanel. Его метод GetState возвращает коллекцию объектов, которые описывают точки касания. Каждый элемент коллекции является экземпляром класса TouchLocation и содержит много свойств, которые хранят информацию о месте экрана, к которому прикоснулся пользователь.
Сенсорный экран — не единственное новое устройство ввода в Windows Phone. Можно использовать акселерометр для создания игр, в которых управление сводится к перемещению и вращению телефона. Акселерометр может измерять ускорение по трём осям, а также определять ориентацию телефона, поскольку на акселерометр действует сила тяжести, которая задаёт постоянное ускорение к центру земли.
Драйвер акселерометра встроен в Windows Phone, и его можно применять для получения значений как в программах XNA, так и в программах Silverlight.
В программе необходимо создать экземпляр класса Accelerometer и назначить обработчик события ReadingChanged, которое происходит каждый раз, когда акселерометр фиксирует новые значения. В программе Silverlight может использовать эти значения как обычные переменные, а также их можно связать со свойствами визуальных элементов. В программе XNA нужно сделать локальную копию новых значений и использовать их в методе Update.
Чтобы использовать класс Accelerometer, нужно добавить в проект ссылку на библиотеку Microsoft.Devices.Sensors, а также директиву using в файл кода. Для создания экземпляра класса Accelerometer и добавления обработчика события можно использовать следующий код:
protected override void Initialize() { Accelerometer acc = new Accelerometer(); acc.ReadingChanged += new EventHandler<AccelerometerReadingEventArgs>(acc_ReadingChanged); acc.Start(); base.Initialize(); }
Метод XNA Initialize вызывается при запуске программы. После добавления обработчика вызывается метод Start, чтобы программа начала получать значения от акселерометра.
Метод-обработчик acc_ReadingChanged будет вызываться при каждом изменении значений:
Vector3 accelState = Vector3.Zero; void acc_ReadingChanged(object sender, AccelerometerReadingEventArgs e) { accelState.X = (float)e.X; accelState.Y = (float)e.Y; accelState.Z = (float)e.Z; }
Дополнительные материалы
Windows Phone 7.5 Training Kit: Labs\GameDevelopmentWithXNA\GameDevelopmentWithXNA.html\html\ DocSet_default.html.
Сайт MSDN: http://msdn.microsoft.com/ru-ru/library/ff434573.
Задание к работе
- Создайте в Visual Studio проект программы XNA для Windows Phone.
- Добавьте в программу код для вывода на экран какого-либо объекта и для его перемещения по экрану. Обратите внимание, чтобы объект не выходил за пределы экрана.
- Создайте необходимые ресурсы для приложения.
- Добавьте в программу возможность управления движением объекта с помощью сенсорного экрана (например, чтобы при касании экрана объект изменял направление движения и двигался к точке касания).
- Запустите программу и проверьте правильность её работы.
- Добавьте в программу один—два дополнительных объекта (неподвижных или движущихся) и добавьте необходимый код для обнаружения столкновений объектов друг с другом.
- Запустите программу и проверьте правильность её работы.
- Составьте отчёт о проделанной работе. Включите в отчёт необходимые листинги программы.