Основы разработки приложений для мобильных устройств на платформе Windows Phone

Создание приложения 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.
  • Добавьте в программу код для вывода на экран какого-либо объекта и для его перемещения по экрану. Обратите внимание, чтобы объект не выходил за пределы экрана.
  • Создайте необходимые ресурсы для приложения.
  • Добавьте в программу возможность управления движением объекта с помощью сенсорного экрана (например, чтобы при касании экрана объект изменял направление движения и двигался к точке касания).
  • Запустите программу и проверьте правильность её работы.
  • Добавьте в программу один—два дополнительных объекта (неподвижных или движущихся) и добавьте необходимый код для обнаружения столкновений объектов друг с другом.
  • Запустите программу и проверьте правильность её работы.
  • Составьте отчёт о проделанной работе. Включите в отчёт необходимые листинги программы.
  • Вернуться к учебному плану