Спонсор: Microsoft
Опубликован: 10.04.2009 | Доступ: свободный | Студентов: 3248 / 243 | Оценка: 4.49 / 4.39 | Длительность: 17:21:00
Специальности: Программист
Самостоятельная работа 1:

Введение в XNA Game Studio 2.0.

< Лекция 4 || Самостоятельная работа 1: 1234 || Самостоятельная работа 2 >

Если сейчас мы попытаемся запустить игру, мы увидим лишь пустое окно (рис. 5.3.).

Окно шаблонного проекта

увеличить изображение
Рис. 5.3. Окно шаблонного проекта

Это окно готово для ваших игровых экспериментов.

Рассмотрим важнейшие элементы содержимого панели Solution Explorer (рис. 5.4.).

Панель Solution Explorer

Рис. 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();
            }
        }
    }
}
Листинг 5.1. Код файла Program.cs

Как видите, выглядит он вполне стандартно. В теле статического метода Main содержатся команды создания нового объекта класса Game1. Объекту присваивается имя game, после чего выполняется метод Run объекта Game, который и запускает игру.

Упрощенно структуру игрового проекта можно представить так (Табл. 5.1.).

Таблица 5.1. Структура игрового проекта
Название Описание
Инициализация На этапе инициализации проекта проводится инициализация графической и звуковых подсистем, системы ввода данных.
Загрузка ресурсов Здесь загружаются игровые ресурсы, такие, как текстуры и трехмерные модели, звуки, шрифты
Начало игрового цикла Основные действия, которые выполняются при работе игры, организованы в виде игрового цикла. Фактически, игровой цикл – это обязательный элемент любой игры.
Считывание данных пользовательского ввода Пользователь управляет игрой с помощью различных устройств ввода данных. В нашем случае это – клавиатура и мышь. Здесь так же может обрабатываться информация, поступающая от других устройств ввода. Например – от джойстика.
Игровые вычисления Игровые вычисления включают в себя все вычисления, которые необходимы для организации игрового процесса. В частности, здесь обсчитываются позиции игровых объектов, проводятся вычисления, связанные с работой искусственного интеллекта, вычисления, связанные с проверкой столкновений игровых объектов, игровая физика, подсчет очков, набранных игроком и так далее. Если речь идет об оптимизации быстродействия игры, то такая оптимизация обычно касается именно игровых вычислений, так как на них тратится большая часть времени выполнения игрового цикла.
Проверка критерия прекращения игры Игровой цикл продолжается до тех пор, пока игра не будет прекращена. Например, критерием остановки может быть истечение времени, выделенного игроку на выполнение игровой задачи, набор определенного количества очков, какое-то событие, произошедшее в процессе игры, принудительная остановка игры, если пользователь решил прекратить играть и так далее.
Вывод изображений, проигрывание звуков После завершения этапа игровых вычислений в программе имеются данные для визуализации. В частности, имеются данные о новых позициях объектов, о сообщениях, которые нужно вывести на игровое поле, о звуках, которые нужно воспроизвести. На данном этапе проводится перемещение объектов по игровому полю, вывод сообщений, проигрывание звука.
Конец игрового цикла Игровой цикл заканчивается после выполнения условия останова игры
Освобождение ресурсов На последнем этапе работы игры проводится освобождение системных ресурсов, занятых игрой и выход из игры.

В стандартном игровом проекте все эти этапы представлены с помощью специальных методов. Эти методы унаследованы созданным игровым проектом от класса Game, который служит основой для проекта. Итак, это следующие методы (табл. 5.2.).

Таблица 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.2. Код файла Game1.cs
< Лекция 4 || Самостоятельная работа 1: 1234 || Самостоятельная работа 2 >
Alina Lasskaja
Alina Lasskaja

Быть может кто-то из Вас знает игру Sims, к какому жанру она относиться? Жизненная симуляция, ролевая игра, там можно и дома строить.....