Опубликован: 12.02.2013 | Доступ: свободный | Студентов: 785 / 44 | Длительность: 17:51:00
Специальности: Программист
Самостоятельная работа 13:

Создание приложения XNA

< Лекция 8 || Самостоятельная работа 13 || Самостоятельная работа 14 >
Аннотация: Цель работы: изучение возможностей создания приложений XNA для Windows Phone и использования сенсорного ввода для управления объектами программы.

Основные теоретические сведения

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

При запуске игры XNA фактически выполняются следующие действия:

  1. Загрузка всех необходимых для игры ресурсов. Сюда входят все звуки, текстуры и модели, необходимые для создания игровой среды.
  2. Периодический запуск игрового движка:
    • обновление игрового мира: получение информации с контроллеров ввода, обновление состояния и положения игровых элементов;
    • отрисовка игрового мира: обновление информации в игровом мире, который может быть двух- или трёхмерным в зависимости от типа игры.

Эти действия выполняются в трёх методах класса 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.

Задание к работе

  1. Создайте в Visual Studio проект программы XNA для Windows Phone.
  2. Добавьте в программу код для вывода на экран какого-либо объекта и для его перемещения по экрану. Обратите внимание, чтобы объект не выходил за пределы экрана.
  3. Создайте необходимые ресурсы для приложения.
  4. Добавьте в программу возможность управления движением объекта с помощью сенсорного экрана (например, чтобы при касании экрана объект изменял направление движения и двигался к точке касания).
  5. Запустите программу и проверьте правильность её работы.
  6. Добавьте в программу один—два дополнительных объекта (неподвижных или движущихся) и добавьте необходимый код для обнаружения столкновений объектов друг с другом.
  7. Запустите программу и проверьте правильность её работы.
  8. Составьте отчёт о проделанной работе. Включите в отчёт необходимые листинги программы.
< Лекция 8 || Самостоятельная работа 13 || Самостоятельная работа 14 >