Опубликован: 14.08.2012 | Уровень: специалист | Доступ: платный
Самостоятельная работа 2:

Введение в XNA, знакомство с проектом, первое приложение

Игровой цикл состоит из двух методов, выполняющихся циклически это методы Update() и Draw()листинг 7.7.

protected override void Update(GameTime gameTime)
        {
            // Позволяет выйти из игры
            if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
                this.Exit();

            // ЗАДАЧА: добавьте здесь логику обновления

            base.Update(gameTime);
        }

        /// <summary>
        /// Вызывается, когда игра отрисовывается.
        /// </summary>
        /// <param name="gameTime">Предоставляет моментальный снимок значений времени.</param>
        protected override void Draw(GameTime gameTime)
        {
            GraphicsDevice.Clear(Color.CornflowerBlue);

            // ЗАДАЧА: добавьте здесь код отрисовки

            base.Draw(gameTime);
        }
Листинг 7.7. Игровой цикл

Сначала выполняется метод Update(), потом – метод Draw().

Команда base.Update(gameTime); метода Update() ответственна за организацию игрового цикла. Она снова и снова вызывает метод Update() базового класса. Именно эта команда является "двигателем" игры. Если ее убрать – игровой цикл не будет работать. Параметр gameTime – представляет собой объект класса GameTime, который содержит информацию об игровом времени. Знание игрового времени нужно для организации взаимодействия внутри игры. По отношению к игровому времени можно выделить два типа игр. Первые – это игры реального времени, такие, как симуляторы. Вторые – это пошаговые игры, где игроку дается некоторое время – фиксированное либо нет – для обдумывания следующего хода. Знание игрового времени нужно для многих игровых вычислений. Класс GameTime имеет несколько важных свойств.

Свойство ElapsedGameTime позволяет узнать время, которое прошло после последнего вызова игрового цикла. TotalGameTime – игровое время, прошедшее с момента старта игры.

ElapsedRealTimeреальное время, прошедшее после последнего вызова игрового цикла. TotalRealTimeреальное время, прошедшее с момента старта игры.

Свойство IsRunningSlowly принимает значение Истина в том случае, если игровой цикл занимает больше времени, чем TargetElapsedTime.

Команда graphics.GraphicsDevice.Clear(Color.CornflowerBlue); метода Draw() очищает игровой экран, заливая его цветом CornflowerBlue. А команда base.Draw(gameTime); вызывает метод Draw() базового класса, который выводит на экран изображения.

Поговорим о пространствах имен (компонентах), которые подключены к стандартному проекту по умолчанию. В листинге 7.8. приведены их вызовы. В таблице 7.3. приведено описание этих пространств имен

using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Input.Touch;
using Microsoft.Xna.Framework.Media;
Листинг 7.8. Подключаемые компоненты
Таблица 7.3. Пространства имен стандартного игрового проекта
Пространство имен Описание
System; Поддержка основных механизмов .NET Framework
System.Collections.Generic; Интерфейсы и классы, определяющие универсальные коллекции
System.Linq; Поддержка запросов к данным с использованием LINQ (Language-Integrated Query)
Xna.Framework; Поддержка общих игровых механизмов XNA – таймеры, игровой цикл.
Xna.Framework.Audio; Инструменты для работы со звуком, с использованием XACT-проектов
Xna.Framework.Content; содержит средства, обеспечивающие работу Content Pipeline.
Xna.Framework.GamerServices; обеспечивает функции работы с сервисом LIVE
Xna.Framework.Graphics; содержит средства для работы с графикой.
Xna.Framework.Input; поддерживает работу со средствами ввода данных (геймпад, клавиатура, мышь)
Xna.Framework.Input.Touch; Работа с тач-панелью, представленной чувствительным к касаниям экраном устройства
Xna.Framework.Media; Работа с медиаданными – изображениями, аудио- и видеозаписями, списками воспроизведения

7.3. Изменение цвета заливки экрана

Изучив игровой проект, выполним небольшую практическую работу. А именно, изменим цвет заполнения экрана. Для этого откроем двойным щелчком в Обозревателе решений файл Game1.cs проекта P2_1 (или переключимся на закладку с именем файла в окне Visual Studio, если файл уже открыт), найдем метод Draw, и изменим в нем строку

GraphicsDevice.Clear(Color.CornflowerBlue);

На

GraphicsDevice.Clear(Color.Yellow);

На рис. 7.5 показан процесс редактирования кода – здесь мы можем пользоваться автоматической подсказкой.

Редактирование кода

увеличить изображение
Рис. 7.5. Редактирование кода

Запустим программу для отладки в эмуляторе, убедимся, что фон теперь имеет желтый цвет, рис. 7.6

Изменение цвета фона в эмуляторе

Рис. 7.6. Изменение цвета фона в эмуляторе

7.5. Задание

Создайте стандартный игровой проект XNA. Уясните назначение пространств имен, подключенных по умолчанию, методов. Для углубленного изучения материала воспользуйтесь справочной системой среды разработки или библиотекой MSDN. Измените цвет заливки экрана.

Гулич Анна
Гулич Анна
Невозможно пройти тесты, в окне с вопросами пусто
Сашечка Огнев
Сашечка Огнев
Россия, Красноярский край
Андрей Корягин
Андрей Корягин
Россия, Пенза, Вазерская средняя школа, 2001