Быть может кто-то из Вас знает игру Sims, к какому жанру она относиться? Жизненная симуляция, ролевая игра, там можно и дома строить..... |
Введение в XNA Game Studio 2.0.
Рассмотрим каждый из приведенных выше методов. В листинге 5.3. приведен код метода Game1().
public Game1() { graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; }Листинг 5.3. Код метода Game1()
Метод Game1() – это конструктор класса Game1. Команда graphics = new GraphicsDeviceManager(this) ; создает новое игровое окно, а объект graphics используется для проведения различных графических операций. Например, с помощью этого объекта можно настраивать ширину и высоту окна, переводить игру в полноэкранный режим.
Помимо описанных команд, автоматически включаемых в стандартный игровой проект, конструктор может содержать и другие команды. Например, команды дополнительной настройки объекта graphics.
В листинге 5.4. приведен код метода Initialize().
protected override void Initialize() { // Сюда следует добавить код инициализации base.Initialize(); }Листинг 5.4. Код метода initialize()
Команда base.Initialize() ; вызывает метод Initialize() базового класса. Сюда же добавляют команды для инициализации звуковой подсистемы игры, здесь же выполняются игровые настройки. Надо отметить, что в этом методе инициализируется все, кроме графических ресурсов игры. Для них существует метод LoadContent(), листинг 5.5.
protected override void LoadContent() { spriteBatch = new SpriteBatch(GraphicsDevice); // Сюда надо добавить код загрузки игровых ресурсов }Листинг 5.5. Код метода LoadContent()
SpriteBatch – это класс, который позвляет выводить изображения на устройство, задаваемое параметром GraphicsDevice. В этот же метод добавляют команды для загрузки графических ресурсов, шрифтов. Метод UnloadContent() (листинг. 5.6.) предназначен для освобождения системных ресурсов.
protected override void UnloadContent() { // Код выгрузки игровых ресурсов }Листинг 5.6. Код метода 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); }Листинг 5.7. Код методов Update() и Draw()
Сначала выполняется метод 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;Листинг 5.8. Подключаемые компоненты
Пространство имен 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;Листинг 5.9. Переменные в разделе свойств класса
Переменная graphics имеет тип GraphicsDeviceManager – она предназначена для управления графическим устройством, которое используется для вывода информации.
Переменная spriteBatch имеет тип SpriteBatch – она нужна для вывода спрайтов на экран.