Перед выполнением этой лабораторной работы убедитесь, что на ПК установлена среда разработки Visual Studio и XNA 2.0.
Для запуска среды разработки, выполните команду Пуск $$\Rightarrow$$ Все программы $$\Rightarrow$$ Microsoft Visual C# 2005 Express Edition. Дальнейшие примеры будут показаны именно с использованием Express-версии. Выполните команду File $$\Rightarrow$$ New Project – откроется окно New Project, в котором нам предлагают выбрать один из стандартных типов проектов (рис. 5.1.)
(рис 5.1) Выбор типа создаваемого проектаВ левой части окна выберем пункт XNA Game Studio 2.0., в правой – Windows Game (2.0.). Имя проекта, сгенерированное автоматически (поле Name) заменим на имя P1_1.
После нажатия на кнопку OK шаблонный проект будет создан. Вот как выглядит окно среды разработки после его создания (рис. 5.2.).
(рис 5.2) Среда разработки после создания шаблонного проектаЕсли вы выполняете сейчас эту лабораторную работу, то вы, скорее всего, имеете опыт работы с Visual Studio. Можно заметить, что внешний вид среды разработки выглядит вполне традиционно. Правую часть окна занимают панели Solution Explorer и Properties, в нижней части окна можно видеть окно Error List, основное пространство занято окном редактора кода.
Напомним, что Solution Explorer используется для просмотра и модификации файлов, которые входят в проект, для добавления новых файлов в проект, окно Properties применяется для модификации свойств выделенного объекта, окно Error List содержит сообщения об ошибках, которые генерируются при выполнении программы, а окно редактора кода применяется при редактировании текстов программ. Основная деятельность по созданию игры ведется именно с использованием вышеупомянутых инструментов.
Для тестового запуска игры служат команды Debug $$\Rightarrow$$ Start Debugging и Debug $$\Rightarrow$$ Start Without Debugging.
Если сейчас мы попытаемся запустить игру, мы увидим лишь пустое окно (рис. 5.3.).
(рис 5.3) Окно шаблонного проектаЭто окно готово для ваших игровых экспериментов.
Рассмотрим важнейшие элементы содержимого панели Solution Explorer (рис. 5.4.).
(рис 5.4) Панель Solution ExplorerФайл Program.cs – это обычный файл программы на C#. Точно такие же файлы обычно генерируются при создании консольных Windows-приложений на C#. Данный файл играет важную роль – в нем содержится точка входа в программу, с него начинается исполнение игры, и именно в нем содержится команда, которая запускает игру.
Файл Game1.cs – это файл, в котором хранится программный код игры. Как правило, вышеописанный Program.cs в модификации не нуждается, а вот Game1.cs – это файл, с которым приходится работать в процессе создания игры. Причем, игры обычно включают в себя множество файлов с программным кодом.
Папка Content содержит игровой контент – то есть – файлы различных форматов, которые используются в игре.
Рассмотрим код стандартного проекта. Нам придется модифицировать этот код в процессе создания собственных игр.
В листинге 5.1. приведено содержимое файла Program.cs.
using System;
namespace P1_1
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
static void Main(string[] args)
{
using (Game1 game = new Game1())
{
game.Run();
}
}
}
}
Как видите, выглядит он вполне стандартно. В теле статического метода Main содержатся команды создания нового объекта класса Game1. Объекту присваивается имя game, после чего выполняется метод Run объекта Game, который и запускает игру.
Упрощенно структуру игрового проекта можно представить так (Табл. 5.1.).
| Название | Описание |
|---|---|
| Инициализация | На этапе инициализации проекта проводится инициализация графической и звуковых подсистем, системы ввода данных. |
| Загрузка ресурсов | Здесь загружаются игровые ресурсы, такие, как текстуры и трехмерные модели, звуки, шрифты |
| Начало игрового цикла | Основные действия, которые выполняются при работе игры, организованы в виде игрового цикла. Фактически, игровой цикл – это обязательный элемент любой игры. |
| Считывание данных пользовательского ввода | Пользователь управляет игрой с помощью различных устройств ввода данных. В нашем случае это – клавиатура и мышь. Здесь так же может обрабатываться информация, поступающая от других устройств ввода. Например – от джойстика. |
| Игровые вычисления | Игровые вычисления включают в себя все вычисления, которые необходимы для организации игрового процесса. В частности, здесь обсчитываются позиции игровых объектов, проводятся вычисления, связанные с работой искусственного интеллекта, вычисления, связанные с проверкой столкновений игровых объектов, игровая физика, подсчет очков, набранных игроком и так далее. Если речь идет об оптимизации быстродействия игры, то такая оптимизация обычно касается именно игровых вычислений, так как на них тратится большая часть времени выполнения игрового цикла. |
| Проверка критерия прекращения игры | Игровой цикл продолжается до тех пор, пока игра не будет прекращена. Например, критерием остановки может быть истечение времени, выделенного игроку на выполнение игровой задачи, набор определенного количества очков, какое-то событие, произошедшее в процессе игры, принудительная остановка игры, если пользователь решил прекратить играть и так далее. |
| Вывод изображений, проигрывание звуков | После завершения этапа игровых вычислений в программе имеются данные для визуализации. В частности, имеются данные о новых позициях объектов, о сообщениях, которые нужно вывести на игровое поле, о звуках, которые нужно воспроизвести. На данном этапе проводится перемещение объектов по игровому полю, вывод сообщений, проигрывание звука. |
| Конец игрового цикла | Игровой цикл заканчивается после выполнения условия останова игры |
| Освобождение ресурсов | На последнем этапе работы игры проводится освобождение системных ресурсов, занятых игрой и выход из игры. |
В стандартном игровом проекте все эти этапы представлены с помощью специальных методов. Эти методы унаследованы созданным игровым проектом от класса Game, который служит основой для проекта. Итак, это следующие методы (табл. 5.2.).
| Название | Описание |
|---|---|
Game1() |
Общая инициализация. Game1() – это конструктор класса Game1, который выполняется при создании объекта Game в процедуре Main файла Program.cs |
Initialize() |
Инициализация игры |
LoadContent() |
Загрузка игровых ресурсов |
Run() |
Запуск игрового цикла. Как было показано выше, метод Run() вызывается в процедуре Main файла Program.cs |
Update() |
Игровой цикл в стандартном проекте состоит из двух методов. Первый из них – это метод Update(), в котором выполняется прием пользовательского ввода, все необходимые вычисления, проверка критериев останова игры. |
Draw() |
Второй метод игрового цикла – это метод Draw(), который содержит код для визуализации игровой графики |
UnloadContent() |
По окончании игрового цикла этот метод освобождает системные ресурсы. |
Теперь, когда мы ознакомились с типичной структурой игры и назначением стандартных методов, рассмотрим код класса Game1 (Листинг 5.2.). В стандартном игровом проекте можно найти англоязычные комментарии. Здесь, для большей наглядности кода, они опущены. Комментарии, ключевые для понимания работы отдельных методов, приведены на русском языке.
using System;
using System.Collections.Generic;
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.Net;
using Microsoft.Xna.Framework.Storage;
namespace P1_1
{
public class Game1 : Microsoft.Xna.Framework.Game
{
GraphicsDeviceManager graphics;
SpriteBatch spriteBatch;
public Game1()
{
graphics = new GraphicsDeviceManager(this);
Content.RootDirectory = "Content";
}
protected override void Initialize()
{
// Сюда следует добавить код инициализации
base.Initialize();
}
protected override void LoadContent()
{
spriteBatch = new SpriteBatch(GraphicsDevice);
// Сюда надо добавить код загрузки игровых ресурсов
}
protected override void UnloadContent()
{
// Код выгрузки игровых ресурсов
}
protected override void Update(GameTime gameTime)
{
// Эта последовательность команд обрабатывает пользовательский ввод и позволяет завершать игру,
она рассчитана на использование джойстика
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
this.Exit();
// Сюда следует добавить код игровых вычислений
base.Update(gameTime);
}
protected override void Draw(GameTime gameTime)
{
graphics.GraphicsDevice.Clear(Color.CornflowerBlue);
// Сюда следует добавить код визуализации игровых объектов
base.Draw(gameTime);
}
}
}
Рассмотрим каждый из приведенных выше методов. В листинге 5.3. приведен код метода Game1().
public Game1()
{
graphics = new GraphicsDeviceManager(this);
Content.RootDirectory = "Content";
}
Метод Game1() – это конструктор класса Game1. Команда graphics = new GraphicsDeviceManager(this) ;
создает новое игровое окно, а объект graphics используется для проведения различных графических операций. Например, с помощью этого объекта можно настраивать ширину и высоту окна, переводить игру в полноэкранный режим.
Помимо описанных команд, автоматически включаемых в стандартный игровой проект, конструктор может содержать и другие команды. Например, команды дополнительной настройки объекта graphics.
В листинге 5.4. приведен код метода Initialize().
protected override void Initialize()
{
// Сюда следует добавить код инициализации
base.Initialize();
}
Команда base.Initialize() ; вызывает метод Initialize() базового класса. Сюда же добавляют команды для инициализации звуковой подсистемы игры, здесь же выполняются игровые настройки. Надо отметить, что в этом методе инициализируется все, кроме графических ресурсов игры. Для них существует метод LoadContent(), листинг 5.5.
protected override void LoadContent()
{
spriteBatch = new SpriteBatch(GraphicsDevice);
// Сюда надо добавить код загрузки игровых ресурсов
}
SpriteBatch – это класс, который позвляет выводить изображения на устройство, задаваемое параметром GraphicsDevice. В этот же метод добавляют команды для загрузки графических ресурсов, шрифтов. Метод UnloadContent() (листинг. 5.6.) предназначен для освобождения системных ресурсов.
protected override void UnloadContent()
{
// Код выгрузки игровых ресурсов
}
Здесь размещают команды для выгрузки игровых ресурсов. В частности, в данном методе можно использовать команду base.UnloadContent() ; - это метод базового класса, выгружающий ресурсы. Так же в этот метод добавляют команды для выгрузки шрифтов и других ресурсов.
Игровой цикл состоит из двух методов, выполняющихся циклически это методы Update() и Draw() – листинг 5.7.
protected override void Update(GameTime gameTime)
{
// Сюда следует добавить код игровых вычислений
base.Update(gameTime);
}
protected override void Draw(GameTime gameTime)
{
graphics.GraphicsDevice.Clear(Color.CornflowerBlue);
// Сюда следует добавить код визуализации игровых объектов
base.Draw(gameTime);
}
Сначала выполняется метод Update(), потом – метод Draw().
Команда base.Update(gameTime) ; метода Update() ответственна за организацию игрового цикла. Она снова и снова вызывает метод Update() базового класса. Именно эта команда является "двигателем" игры. Если ее убрать – игровой цикл не будет работать. Параметр gameTime – представляет собой объект класса GameTime, который содержит информацию об игровом времени. Знание игрового времени нужно для организации взаимодействия внутри игры. По отношению к игровому времени можно выделить два типа игр. Первые – это игры реального времени, такие, как симуляторы. Вторые – это пошаговые игры, где игроку дается некоторое время – фиксированное либо нет – для обдумывания следующего хода. Знание игрового времени нужно для многих игровых вычислений. Класс GameTime имеет несколько важных свойств.
Свойство ElapsedGameTime позволяет узнать время, которое прошло после последнего вызова игрового цикла. TotalGameTime – игровое время, прошедшее с момента старта игры.
ElapsedRealTime – реальное время, прошедшее после последнего вызова игрового цикла. TotalRealTime – реальное время, прошедшее с момента старта игры.
Команда graphics.GraphicsDevice.Clear(Color.CornflowerBlue) ; метода Draw() очищает игровой экран, заливая его цветом CornflowerBlue. А команда base.Draw(gameTime) ; вызывает метод Draw() базового класса, который выводит на экран изображения.
Поговорим о пространствах имен (компонентах), которые подключены к стандартному проекту по умолчанию. В листинге 5.8. приведены их вызовы.
using System; using System.Collections.Generic; 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.Net; using Microsoft.Xna.Framework.Storage;
Пространство имен Audio содержит инструменты для работы со звуком. Для работы со звуком в XNA существует утилита XACT (Microsoft Cross-Platform Audio Creation Tool). Подготовка музыки и звуков осуществляется с помощью этой утилиты, создается специальный XACT-проект, который загружается в игру. Применение XACT позволяет использовать одно и то же звуковое оформление как в Windows-играх, так и в Xbox360-играх.
Пространство имен Graphics представляет собой графическую часть XNA и содержит в себе средства для работы с графикой.
Пространство имен Input поддерживает работу со средствами ввода данных, в частности, это клавиатура, мышь и игровой манипулятор – джойстик. Как правило, при создании Windows-игр используют мышь и клавиатуру, при создании Xbox-игр – джойстик.
Пространство имен Storage содержит средства для работы с файловой системой. Именно инструменты из Storage позволяют, например, сохранять игровые данные в файлы, читать их и выполнять другие файловые операции.
Пространство имен Net поддерживает создание сетевых игр с помощью XNA. Реализация сетевого взаимодействия в XNA-играх осуществляется с помощью Windows LIVE.
Пространство имен Content содержит средства, обеспечивающие работу Content Pipeline. Content Pipeline – это очень важный механизм XNA Framework.
Пространство имен GamerService обеспечивает функции работы с сервисом LIVE – для игр под Xbox и Windows. Эти функции необходимы для создания сетевых игр. В частности, в GamerService находятся функции, позволяющие игроку регистрироваться для участия в игре, работать с информацией об игроке, хранить локальные пользовательские настройки для сетевых игр.
В разделе объявления свойств класса Game1 есть две переменных (листинг 5.9.).
GraphicsDeviceManager graphics;
SpriteBatch spriteBatch;
Переменная graphics имеет тип GraphicsDeviceManager – она предназначена для управления графическим устройством, которое используется для вывода информации.
Переменная spriteBatch имеет тип SpriteBatch – она нужна для вывода спрайтов на экран.
Этот семинар посвящен презентации проектов слушателей, над которыми они будут работать при прохождении курса. Это – проекты игр, использующих двумерную графику и технологии, рассматриваемые в ходе курса. Исторически сложилось так, что очень многие игры прошли развитие от 2D-версий к 3D-версиям. Поэтому слушателям предлагается разработать двумерные проекты, которые, после изучения материала о трехмерной графике, можно будет переработать в 3D.
В ходе презентации слушатели рассказывают о концепции игры, о её целевой аудитории, отличиях от существующих игр схожего класса, демонстрируют эскизы. Фактически, рассказывая о своей игре, слушатели освещают некоторые разделы разработанной ими игровой документации. Вполне возможна ситуация, когда над одним проектом пожелают работать несколько слушателей, создав, таким образом, небольшую команду разработчиков.
Для проведения семинара необходимо презентационное оборудование.
Перед выполнением этой лабораторной работы убедитесь, что на ПК установлена среда разработки Visual Studio и XNA 2.0.
Для запуска среды разработки, выполните команду Пуск $$\Rightarrow$$ Все программы $$\Rightarrow$$ Microsoft Visual C# 2005 Express Edition. Дальнейшие примеры будут показаны именно с использованием Express-версии. Выполните команду File $$\Rightarrow$$ New Project – откроется окно New Project, в котором нам предлагают выбрать один из стандартных типов проектов (рис. 5.1.)
(рис 5.1) Выбор типа создаваемого проектаВ левой части окна выберем пункт XNA Game Studio 2.0., в правой – Windows Game (2.0.). Имя проекта, сгенерированное автоматически (поле Name) заменим на имя P1_1.
После нажатия на кнопку OK шаблонный проект будет создан. Вот как выглядит окно среды разработки после его создания (рис. 5.2.).
(рис 5.2) Среда разработки после создания шаблонного проектаЕсли вы выполняете сейчас эту лабораторную работу, то вы, скорее всего, имеете опыт работы с Visual Studio. Можно заметить, что внешний вид среды разработки выглядит вполне традиционно. Правую часть окна занимают панели Solution Explorer и Properties, в нижней части окна можно видеть окно Error List, основное пространство занято окном редактора кода.
Напомним, что Solution Explorer используется для просмотра и модификации файлов, которые входят в проект, для добавления новых файлов в проект, окно Properties применяется для модификации свойств выделенного объекта, окно Error List содержит сообщения об ошибках, которые генерируются при выполнении программы, а окно редактора кода применяется при редактировании текстов программ. Основная деятельность по созданию игры ведется именно с использованием вышеупомянутых инструментов.
Для тестового запуска игры служат команды Debug $$\Rightarrow$$ Start Debugging и Debug $$\Rightarrow$$ Start Without Debugging.
Если сейчас мы попытаемся запустить игру, мы увидим лишь пустое окно (рис. 5.3.).
(рис 5.3) Окно шаблонного проектаЭто окно готово для ваших игровых экспериментов.
Рассмотрим важнейшие элементы содержимого панели Solution Explorer (рис. 5.4.).
(рис 5.4) Панель Solution ExplorerФайл Program.cs – это обычный файл программы на C#. Точно такие же файлы обычно генерируются при создании консольных Windows-приложений на C#. Данный файл играет важную роль – в нем содержится точка входа в программу, с него начинается исполнение игры, и именно в нем содержится команда, которая запускает игру.
Файл Game1.cs – это файл, в котором хранится программный код игры. Как правило, вышеописанный Program.cs в модификации не нуждается, а вот Game1.cs – это файл, с которым приходится работать в процессе создания игры. Причем, игры обычно включают в себя множество файлов с программным кодом.
Папка Content содержит игровой контент – то есть – файлы различных форматов, которые используются в игре.
Рассмотрим код стандартного проекта. Нам придется модифицировать этот код в процессе создания собственных игр.
В листинге 5.1. приведено содержимое файла Program.cs.
using System;
namespace P1_1
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
static void Main(string[] args)
{
using (Game1 game = new Game1())
{
game.Run();
}
}
}
}
Как видите, выглядит он вполне стандартно. В теле статического метода Main содержатся команды создания нового объекта класса Game1. Объекту присваивается имя game, после чего выполняется метод Run объекта Game, который и запускает игру.
Упрощенно структуру игрового проекта можно представить так (Табл. 5.1.).
| Название | Описание |
|---|---|
| Инициализация | На этапе инициализации проекта проводится инициализация графической и звуковых подсистем, системы ввода данных. |
| Загрузка ресурсов | Здесь загружаются игровые ресурсы, такие, как текстуры и трехмерные модели, звуки, шрифты |
| Начало игрового цикла | Основные действия, которые выполняются при работе игры, организованы в виде игрового цикла. Фактически, игровой цикл – это обязательный элемент любой игры. |
| Считывание данных пользовательского ввода | Пользователь управляет игрой с помощью различных устройств ввода данных. В нашем случае это – клавиатура и мышь. Здесь так же может обрабатываться информация, поступающая от других устройств ввода. Например – от джойстика. |
| Игровые вычисления | Игровые вычисления включают в себя все вычисления, которые необходимы для организации игрового процесса. В частности, здесь обсчитываются позиции игровых объектов, проводятся вычисления, связанные с работой искусственного интеллекта, вычисления, связанные с проверкой столкновений игровых объектов, игровая физика, подсчет очков, набранных игроком и так далее. Если речь идет об оптимизации быстродействия игры, то такая оптимизация обычно касается именно игровых вычислений, так как на них тратится большая часть времени выполнения игрового цикла. |
| Проверка критерия прекращения игры | Игровой цикл продолжается до тех пор, пока игра не будет прекращена. Например, критерием остановки может быть истечение времени, выделенного игроку на выполнение игровой задачи, набор определенного количества очков, какое-то событие, произошедшее в процессе игры, принудительная остановка игры, если пользователь решил прекратить играть и так далее. |
| Вывод изображений, проигрывание звуков | После завершения этапа игровых вычислений в программе имеются данные для визуализации. В частности, имеются данные о новых позициях объектов, о сообщениях, которые нужно вывести на игровое поле, о звуках, которые нужно воспроизвести. На данном этапе проводится перемещение объектов по игровому полю, вывод сообщений, проигрывание звука. |
| Конец игрового цикла | Игровой цикл заканчивается после выполнения условия останова игры |
| Освобождение ресурсов | На последнем этапе работы игры проводится освобождение системных ресурсов, занятых игрой и выход из игры. |
В стандартном игровом проекте все эти этапы представлены с помощью специальных методов. Эти методы унаследованы созданным игровым проектом от класса Game, который служит основой для проекта. Итак, это следующие методы (табл. 5.2.).
| Название | Описание |
|---|---|
Game1() |
Общая инициализация. Game1() – это конструктор класса Game1, который выполняется при создании объекта Game в процедуре Main файла Program.cs |
Initialize() |
Инициализация игры |
LoadContent() |
Загрузка игровых ресурсов |
Run() |
Запуск игрового цикла. Как было показано выше, метод Run() вызывается в процедуре Main файла Program.cs |
Update() |
Игровой цикл в стандартном проекте состоит из двух методов. Первый из них – это метод Update(), в котором выполняется прием пользовательского ввода, все необходимые вычисления, проверка критериев останова игры. |
Draw() |
Второй метод игрового цикла – это метод Draw(), который содержит код для визуализации игровой графики |
UnloadContent() |
По окончании игрового цикла этот метод освобождает системные ресурсы. |
Теперь, когда мы ознакомились с типичной структурой игры и назначением стандартных методов, рассмотрим код класса Game1 (Листинг 5.2.). В стандартном игровом проекте можно найти англоязычные комментарии. Здесь, для большей наглядности кода, они опущены. Комментарии, ключевые для понимания работы отдельных методов, приведены на русском языке.
using System;
using System.Collections.Generic;
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.Net;
using Microsoft.Xna.Framework.Storage;
namespace P1_1
{
public class Game1 : Microsoft.Xna.Framework.Game
{
GraphicsDeviceManager graphics;
SpriteBatch spriteBatch;
public Game1()
{
graphics = new GraphicsDeviceManager(this);
Content.RootDirectory = "Content";
}
protected override void Initialize()
{
// Сюда следует добавить код инициализации
base.Initialize();
}
protected override void LoadContent()
{
spriteBatch = new SpriteBatch(GraphicsDevice);
// Сюда надо добавить код загрузки игровых ресурсов
}
protected override void UnloadContent()
{
// Код выгрузки игровых ресурсов
}
protected override void Update(GameTime gameTime)
{
// Эта последовательность команд обрабатывает пользовательский ввод и позволяет завершать игру,
она рассчитана на использование джойстика
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
this.Exit();
// Сюда следует добавить код игровых вычислений
base.Update(gameTime);
}
protected override void Draw(GameTime gameTime)
{
graphics.GraphicsDevice.Clear(Color.CornflowerBlue);
// Сюда следует добавить код визуализации игровых объектов
base.Draw(gameTime);
}
}
}
Рассмотрим каждый из приведенных выше методов. В листинге 5.3. приведен код метода Game1().
public Game1()
{
graphics = new GraphicsDeviceManager(this);
Content.RootDirectory = "Content";
}
Метод Game1() – это конструктор класса Game1. Команда graphics = new GraphicsDeviceManager(this) ;
создает новое игровое окно, а объект graphics используется для проведения различных графических операций. Например, с помощью этого объекта можно настраивать ширину и высоту окна, переводить игру в полноэкранный режим.
Помимо описанных команд, автоматически включаемых в стандартный игровой проект, конструктор может содержать и другие команды. Например, команды дополнительной настройки объекта graphics.
В листинге 5.4. приведен код метода Initialize().
protected override void Initialize()
{
// Сюда следует добавить код инициализации
base.Initialize();
}
Команда base.Initialize() ; вызывает метод Initialize() базового класса. Сюда же добавляют команды для инициализации звуковой подсистемы игры, здесь же выполняются игровые настройки. Надо отметить, что в этом методе инициализируется все, кроме графических ресурсов игры. Для них существует метод LoadContent(), листинг 5.5.
protected override void LoadContent()
{
spriteBatch = new SpriteBatch(GraphicsDevice);
// Сюда надо добавить код загрузки игровых ресурсов
}
SpriteBatch – это класс, который позвляет выводить изображения на устройство, задаваемое параметром GraphicsDevice. В этот же метод добавляют команды для загрузки графических ресурсов, шрифтов. Метод UnloadContent() (листинг. 5.6.) предназначен для освобождения системных ресурсов.
protected override void UnloadContent()
{
// Код выгрузки игровых ресурсов
}
Здесь размещают команды для выгрузки игровых ресурсов. В частности, в данном методе можно использовать команду base.UnloadContent() ; - это метод базового класса, выгружающий ресурсы. Так же в этот метод добавляют команды для выгрузки шрифтов и других ресурсов.
Игровой цикл состоит из двух методов, выполняющихся циклически это методы Update() и Draw() – листинг 5.7.
protected override void Update(GameTime gameTime)
{
// Сюда следует добавить код игровых вычислений
base.Update(gameTime);
}
protected override void Draw(GameTime gameTime)
{
graphics.GraphicsDevice.Clear(Color.CornflowerBlue);
// Сюда следует добавить код визуализации игровых объектов
base.Draw(gameTime);
}
Сначала выполняется метод Update(), потом – метод Draw().
Команда base.Update(gameTime) ; метода Update() ответственна за организацию игрового цикла. Она снова и снова вызывает метод Update() базового класса. Именно эта команда является "двигателем" игры. Если ее убрать – игровой цикл не будет работать. Параметр gameTime – представляет собой объект класса GameTime, который содержит информацию об игровом времени. Знание игрового времени нужно для организации взаимодействия внутри игры. По отношению к игровому времени можно выделить два типа игр. Первые – это игры реального времени, такие, как симуляторы. Вторые – это пошаговые игры, где игроку дается некоторое время – фиксированное либо нет – для обдумывания следующего хода. Знание игрового времени нужно для многих игровых вычислений. Класс GameTime имеет несколько важных свойств.
Свойство ElapsedGameTime позволяет узнать время, которое прошло после последнего вызова игрового цикла. TotalGameTime – игровое время, прошедшее с момента старта игры.
ElapsedRealTime – реальное время, прошедшее после последнего вызова игрового цикла. TotalRealTime – реальное время, прошедшее с момента старта игры.
Команда graphics.GraphicsDevice.Clear(Color.CornflowerBlue) ; метода Draw() очищает игровой экран, заливая его цветом CornflowerBlue. А команда base.Draw(gameTime) ; вызывает метод Draw() базового класса, который выводит на экран изображения.
Поговорим о пространствах имен (компонентах), которые подключены к стандартному проекту по умолчанию. В листинге 5.8. приведены их вызовы.
using System; using System.Collections.Generic; 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.Net; using Microsoft.Xna.Framework.Storage;
Пространство имен Audio содержит инструменты для работы со звуком. Для работы со звуком в XNA существует утилита XACT (Microsoft Cross-Platform Audio Creation Tool). Подготовка музыки и звуков осуществляется с помощью этой утилиты, создается специальный XACT-проект, который загружается в игру. Применение XACT позволяет использовать одно и то же звуковое оформление как в Windows-играх, так и в Xbox360-играх.
Пространство имен Graphics представляет собой графическую часть XNA и содержит в себе средства для работы с графикой.
Пространство имен Input поддерживает работу со средствами ввода данных, в частности, это клавиатура, мышь и игровой манипулятор – джойстик. Как правило, при создании Windows-игр используют мышь и клавиатуру, при создании Xbox-игр – джойстик.
Пространство имен Storage содержит средства для работы с файловой системой. Именно инструменты из Storage позволяют, например, сохранять игровые данные в файлы, читать их и выполнять другие файловые операции.
Пространство имен Net поддерживает создание сетевых игр с помощью XNA. Реализация сетевого взаимодействия в XNA-играх осуществляется с помощью Windows LIVE.
Пространство имен Content содержит средства, обеспечивающие работу Content Pipeline. Content Pipeline – это очень важный механизм XNA Framework.
Пространство имен GamerService обеспечивает функции работы с сервисом LIVE – для игр под Xbox и Windows. Эти функции необходимы для создания сетевых игр. В частности, в GamerService находятся функции, позволяющие игроку регистрироваться для участия в игре, работать с информацией об игроке, хранить локальные пользовательские настройки для сетевых игр.
В разделе объявления свойств класса Game1 есть две переменных (листинг 5.9.).
GraphicsDeviceManager graphics;
SpriteBatch spriteBatch;
Переменная graphics имеет тип GraphicsDeviceManager – она предназначена для управления графическим устройством, которое используется для вывода информации.
Переменная spriteBatch имеет тип SpriteBatch – она нужна для вывода спрайтов на экран.
Этот семинар посвящен презентации проектов слушателей, над которыми они будут работать при прохождении курса. Это – проекты игр, использующих двумерную графику и технологии, рассматриваемые в ходе курса. Исторически сложилось так, что очень многие игры прошли развитие от 2D-версий к 3D-версиям. Поэтому слушателям предлагается разработать двумерные проекты, которые, после изучения материала о трехмерной графике, можно будет переработать в 3D.
В ходе презентации слушатели рассказывают о концепции игры, о её целевой аудитории, отличиях от существующих игр схожего класса, демонстрируют эскизы. Фактически, рассказывая о своей игре, слушатели освещают некоторые разделы разработанной ими игровой документации. Вполне возможна ситуация, когда над одним проектом пожелают работать несколько слушателей, создав, таким образом, небольшую команду разработчиков.
Для проведения семинара необходимо презентационное оборудование.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.