• Games
  • TMNT
  • Игры
  • Игры
Главная
Всё для геймера: Обзоры игр, Игровые новости, Читы, Советы и пр.
Всё о компьютерных и консольных играх.
Приветствую Вас Гость
Меню геймера
Разделы каталога
Общие игровые статьи [160]
Игровая аналитика, обзоры серий игр с разных платформ, анализ игр, игровой индустрии и т.д.
Онлайн игры [231]
Статьи и обзоры онлайновых клиентских и браузерных игр
Флэш игры/Flash [11]
2D/3D игры любого жанра на технологии Adobe Flash для игры в плеере или в браузере.
Браузерные онлайн-игры [72]
Браузере игры разных жанров и типов, индивидуальные, а также для социальных сетей и пр.
Разработка игр [102]
Создание игр, программирование, игровые движки, Языки программирования
Моддинг [8]
Модификация игр, перевод, локализация, русификация, ромхакинг
Эмуляция [7]
Эмуляторы и эмуляция компьютеров, консолей, игровых автоматов и прочих систем
Игровые фанфики [2]
Художественная игровая литература, творчество поклонников игр, игровых систем и платформ.
Настольные игры и игрушки [32]
Настольные игры, карточные игры, игрушки и сувениры
Опрос геймеров
Сколько часов в сутки вы играете в игры?
Всего ответов: 17050
Главная » Статьи » Игровые статьи » Разработка игр

Создаём двухмерную игру: Первый проект [Xbox 360]
С этой главы мы начинаем работать с исходным кодом игры, применяя инструментальные средства, рассмотренные в третьей и четвертой главах. Текущий проект для этой главы создается на базе шаблона Xbox 360 Game. В дальнейшем каждая новая глава будет являться модификацией проекта из предыдущей главы.
Предложенный подход в видоизменении и развитии проекта сохранится до конца книги. Таким образом, вы шаг за шагом, как и при реальной разработке приложений, создадите к концу книги две игры. В связи с этим рекомендуется изучать все главы исключительно в хронологическом порядке.
Первый проект под названием FirstProject мы создадим с использованием шаблона Xbox 360 Game, которой добавился в Visual C# Express после установки на компьютер XNA Game Studio Express. Это простой шаблонный проект, формирующий каркас будущей игры. Шаблон хорош тем, что он автоматически создает необходимую структуру программы, включая в себя все этапы от инициализации компонентов игры до освобождения ресурсов, захваченных приложением. В действительности шаблонный подход в создании программ очень хорошо иллюстрирует технику организации проектов на базе Application Model.

5.1. Создаем проект в Visual C# Express

Откройте на компьютере Visual C# Express. Для создания проекта выполните команды File -> New Project (Ctrl+Shift+N). Откроется диалоговое окно New Project, изображенное на рис. 5.1. В этом окне в списке Templates изберите курсором мыши шаблон под азванием Xbox 360 Game. Затем в поле Name укажите имя будущего проекта (у нас это FirstProject). В поле Location необходимо задать каталог для хранения создаваемого проекта, и вот тут вас могут поджидать некоторые неприятности.

Рис. 5.1. Диалоговое окно New Project

Использование имен папок, написанных кириллицей, как, впрочем, и названий самих проектов, не допустимо! В названиях необходимо применять только английский алфавит. Возможны также проблемы, если вы храните ваши проекты на другом жестком диске или в другом разделе одного диска. Все эти проблемы могут быть, а могут и не быть, в зависимости от того, какие средства будут задействованы в текущем проекте.
Например, XNA Content Pipeline весьма капризен к папкам с русскими именами. В связи с этим лучше всего создать в корневом каталоге диска «С» папку с любым английским названием и хранить в этой папке свои проекты. Тогда вы гарантированно будете избавлены от разного рода ошибок при компиляции примеров. Я для всех примеров книги создал папку Code, в которой формировались отдельные папки для каждой главы, например для этой главы это папка Chapter5.
Каждый новый проект одной главы также имеет свою папку, совпадающую с названием этого проекта. На диске, идущем в комплекте с книгой, эта иерархия проектов также охраняется.
Продолжаем, в диалоговом окне New Project присутствует флаг Create directory for solution. Выбор этого флажка автоматически формирует вложенную папку в каталоге создаваемого проекта для хранения данных Solution Explorer. Этот флаг лучше не использовать и снять. После всех действий в окне New Project нажмите кнопку ОК. Инструментарий Visual C# Express на основе избранного нами шаблона создаст новый каркас проекта.

5.2. Структура проекта

После создания проекта в рабочем каталоге диска «С» появится папка с названием программы. В этой папке будут находиться все файлы проекта, а также папка bin\Xbox360. В данной папке после компиляции и сборки проекта создаются еще две вложенные папки. Для отладочной версии программы это папка Debug, а для окончательной версии программы – папка Release.
После создания проекта FirstProject в рабочем окне Visual C# Express с правой стороны открывается панель Solution Explorer, где отображается древовидная структура текущего проекта, которая состоит из следующих компонентов (рис. 5.2).

Рис. 5.2. Панель Solution Explorer

* Папка Properties – эта папка содержит файл AssemblyInfo.cs с описательными свойствами всего проекта (создатель игры, товарные знаки, версия игры и т. д.). Вы можете открыть этот файл и редактировать его через текстовый редактор инструментария Visual C# Express. Если щелкнуть правой кнопкой мыши на файле AssemblyInfo.cs и в появившемся конекстном меню выбрать команду Properties, то в нижней части панели Solution Explorer появится дополнительная панель Properties, через которую также возможно редактирование файла AssemblyInfo.cs. Дополнительно если щелкнуть правой кнопкой мыши уже на названии всего проекта в панели Solution Explorer и в появившемся меню выбрать команду Properties, то в текстовом редакторе откроется вкладка с одноименным названием проекта (рис. 5.3). Здесь также можно задавать различные до полнительные свойства для текущего проекта, к которым мы вернемся ближе к концу этой главы.

Рис. 5.3. Вкладка со свойствами проекта

* Папка References – в этой папке отображаются все задействованные в проекте ссылки на библиотечные классы платформы XNA. Выбор любого класса на панели Solution Explorer откроет в текстовом редакторе вкладку с представлением этого класса (рис. 5.4). В какой-то мере этот механизм можно использовать как справочную систему.
* Класс Game1.cs – шаблонный класс Game1, сформированный Visual C# Express. Содержит костяк программы с набором необходимых методов и объектов.
* Иконка GameThumbnail – иконка текущего проекта, выполненная в виде графического изображения в формате PNG. Эта иконка отображается на приставке Xbox 360 в XNA Game Launcher (рис. 5.13). По умолчанию в каталог проекта добавляется стандартная иконка, но вы можете заменить эту иконку на свою собственную иконку. Рекомендуемый размер иконки – 64 на 64 пикселя и весом не более 16 Кбайт. Если изображение будет большего размера, то приставка Xbox 360 автоматически его ужмет, но в этом
случае возможны некоторые искажения рисунка.
* Класс Program.cs – это также шаблонный класс, который является входной точкой для всех приложений. С рассмотрения этого файла мы сейчас приступим к изучению исходного кода созданной программы.

Рис. 5.4. Обзор библиотек

5.3. Класс Program

Класс Program – это класс-шаблон, который Visual C# Express создает автоматически для любой программы вне зависимости от ее направленности. Этот класс служит входной точкой для начала работы всей программы. В любой программе на любом языке есть свой метод или функция, которая выступает в роли зажигания (если брать аналогию с машиной) и заводит программу. После чего в работу подключаются уже остальные винтики всего механизма.
Класс Program и есть зажигание для всей программы, и очень редко, когда необходимо вносить изменения в исходный код класса Program, но это возможно, и подчас в больших проектах такой подход действительно оправдан. Теперь давайте посмотрим на листинг 5.1 класса Program проекта FirstProject и постараемся разобраться, что здесь к чему.

//=========================================================================
///


/// Листинг 5.1
/// Исходный код к книге:
/// «Программирование игр для приставки Xbox 360 в XNA Game Studio Express»
/// Автор книги: Горнаков С. Г.
/// Глава 5
/// Проект: FirstProject
/// Класс: Program
/// Создание первого проекта
///

//=========================================================================
using System;
namespace FirstProject
{
static class Program
{
static void Main(string[] args)
{
using (Game1 game = new Game1())
{
game.Run();
}
}
}
}

Обратите внимание на комментарии. Использование в комментариях тройных слэшей и различных ключевых слов, таких как

или , – для языка программирования C# нормальная практика. Этот подход позволяет сделать хорошо документированный исходный код программы.
В начале исходного кода в файле Program.cs происходит подключение различных системных классов посредством оператора using, а также для всего проекта объявляется пространство имен оператором namespace FirstProject.
Пространство имен в С# организовывается для избежания возможных конфликтов при обращении к библиотекам с одинаковыми названиями, созданными различными производителями. Пространство имен официально ограничивает использование конкретного имени в пределах только этого программного кода или целого проекта, в частности.
За объявлением пространства имен в исходном коде следует объявление класса Program и вызов метода Main(). Среда исполнения CLR при старте программы начинает поиск метода Main(), и с запуска именного этого метода начинается работа всего приложения. В программе можно создать несколько методов Main(), но в этом случае все равно один из методов будет главным, а чтобы обозначить, какой именно метод главный, можно использовать командную строку, дабы показать компилятору C# точку входа в программу. Технически такую операцию сделать можно, но у нас подобной необходимости нет.
Внутри метода Main() происходит создание объекта game класса Game1, после чего в работу включается системный метод Run(). Этот метод и есть зажигание, которое запускает системный поток, где и происходит выполнение всей программы. Пока программа работает, системный поток функционирует, как только пользователь закрывает программу, работа потока автоматически прекращается, а программа выгружается из памяти.

5.4. Класс Game1

После запуска метода Run() управление работой приложения передается в класс Game1, где начинается выполнение исходного кода файла Game1.cs, к рассмотрению которого мы переходим.
Каркас исходного кода класса Game1 создается посредством шаблона инструментария Visual C# Express и студии XNA Game Studio Express. Набор методов этого класса имеет стандартные для XNA функции, к которым вы вправе добавлять свои новые методы либо изменять имеющиеся. Рассмотрим исходный код файла Game1.cs из листинга 5.2.

//=========================================================================
///


/// Листинг 5.2
/// Исходный код к книге:
/// «Программирование игр для приставки Xbox 360 в XNA Game Studio Express»
/// Автор книги: Горнаков С. Г.
/// Глава 5
/// Проект: FirstProject
/// Класс: Game1
/// Создаем первый проект
///

//=========================================================================
#region Using Statements
using System;
using System.Collections.Generic;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Storage;
#endregion
namespace FirstProject
{
public class Game1 : Microsoft.Xna.Framework.Game
{
GraphicsDeviceManager graphics;
ContentManager content;
///

/// Конструктор
///

public Game1()
{
graphics = new GraphicsDeviceManager(this);
content = new ContentManager(Services);
}
///

/// Инициализация
///

protected override void Initialize()
{
base.Initialize();
}
///

/// Загрузка компонентов игры
///

protected override void LoadGraphicsContent(bool loadAllContent)
{
if (loadAllContent)
{
}
}
///

/// Освобождаем ресурсы
///
protected override void UnloadGraphicsContent(bool unloadAllContent)
{
if (unloadAllContent == true)
{
content.Unload();
}
}
///
/// Обновляем состояние игры
///
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);
}
}
}

В самом начале исходного кода класса Game1 происходят подключение системных иблиотек и определение пространства имен проекта. Название класса Game1 редлагается Visual C# Express по умолчанию, но если вам не нравится это имя класса, естественно, вы его можете изменить. Для изменения имени класса необходимо щелкнуть в Solution Explorer правой кнопкой мыши на названии файла Game1.cs и в появившемся контекстном меню выбрать команду Rename. Соответственно, вам придется изменить название класса и в исходном коде файла Program.cs, а также в других классах программы, где вы упоминаете этот класс. На самом деле, как вы понимаете, особой необходимости в изменении имени класса нет, поскольку для проекта все равно определяется свое пространство имен.
Далее идет объявление самого класса Game1:
public class Game1 : Microsoft.Xna.Framework.Game
Эта строка кода говорит о том, что класс Game1 является производным от системного класса Game библиотеки Microsoft.Xna.Framework. Иначе говоря, класс Game1 наследует все возможности своего базового класса Microsoft.
Xna.Framework.Game, что дает ему право использовать всю силу и мощь своего прародителя, а также возможность модификации всех методов базового класса.
Затем в исходном коде Game1.cs происходит глобальное объявление двух объектов:
GraphicsDeviceManager graphics;
ContentManager content;
Первая строка определяет объект graphics класса GraphicsDeviceManager.
С помощью этого объекта в программе происходят настройка и конфигурация рафического устройства, или, говоря простым языком, настройка и конфигурация видеоадаптера, установленного в приставке Xbox 360.
Объект content необходим для загрузки в проект различной графической составляющей при помощи XNA Content Pipeline. В этой главе объект content мы использовать не будем, поэтому поговорим о нем подробнее в следующей главе.
Далее в исходном коде следует конструктор класса Game1().

public Game1()
{
graphics = new GraphicsDeviceManager(this);
content = new ContentManager(Services);
}

Здесь происходит создание двух объявленных ранее объектов стандартным образом для XNA. Фактически объект graphics класса GraphicsDeviceManager заменил всю ту череду вызовов различных функций в DirectX, необходимых для инициализации и настройки графического устройства.
За конструктором класса Game1() следует определение метода Initialize().

protected override void Initialize()
{
// здесь следует код инициализации
base.Initialize();
}

Этот метод предназначен для инициализации различных компонентов игры, которые вам понадобятся перед самым первым стартом игры. Из этого метода вы можете передавать управление и в другие методы, связанные с инициализацией различных начальных данных (позиции на экране, инициализация различных переменных и т. д.). Единственные ограничения этого метода состоят в том, что в данном методе нельзя загружать графические компоненты игры (текстуры, модели), для этих целей служит метод LoadGraphicsContent().

protected override void LoadGraphicsContent(bool loadAllContent)
{
if (loadAllContent)
{
// здесь загружаются модели и графические элементы
}
}

Метод LoadGraphicsContent() необходим для загрузки графической составляющей вашей игры, используя при этом всю мощь XNA Content Pipeline, который позволяет загрузить в одну строку кода любую 3D-модель или графику определенного формата. Поддерживаемых форматов много, но об этом в следующей главе, когда мы с этим непосредственно столкнемся.
Следующим в исходном коде идет метод UnloadGraphicsContent(), который в автоматическом режиме производит выгрузку загруженных 3D-моделей и графики на этапе выхода из игры. Это своего рода менеджер выгрузки компонентов игры, аботающий на автомате и освобождающий захваченные ресурсы системы по сигналу выхода из программы. В стандартном использовании загрузчика добавлять в метод UnloadGraphicsContent() дополнительный исходный код не нужно. Но если применяются различные дополнительные загрузчики, то выгрузку загруженных элементов в методе UnloadGraphicsContent() необходимо прописать явно.
Затем в исходном коде класса Game1 располагается метод Update() со следующим исходным кодом:

protected override void Update(GameTime gameTime)
{
if(GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
this.Exit();
// код игры
base.Update(gameTime);
}

Этот метод предназначен для обновления состояния игры. В методе Update() необходимо расположить все методы, отвечающие за логику игры, реализовать механизм получения событий с клавиатуры, мыши или джойстика, воспроизведение звука. Определить, что именно будет происходить после столкновений, выстрелов, ударов и т. д. Этот метод в игре вызывается с циклической периодичностью (…30–60… кадров в секунду, те самые FPS), а точнее через определенный промежуток времени. Промежуток времени задается в автоматическом режиме через объект gameTime (при желании можно помогать XNA и создать свой таймер). То есть метод Update() – это полноценный игровой цикл, цель ко-
торого заключается в постоянном обновлении состояния игры.
Первая и вторая строки кода в методе Update() получают события с джойстика и реализуют закрытие программы. В данном случае по нажатии кнопки Back на джойстике приставки Xbox 360 будет осуществлен выход из программы. Подробнее о методике использования в играх джойстика вы узнаете из главы 9.
Последний метод класса Game1 – это метод Draw().
protected override void Draw(GameTime gameTime)

{
graphics.GraphicsDevice.Clear(Color.CornflowerBlue);
// здесь рисуем графику
base.Draw(gameTime);
}

Данный метод необходим для отрисовки всей графики на экране. Метод Draw(), как и метод Update(), работает в циклическом режиме, постоянно обновляя состояние игры и перерисовывая игровую графику. Периодичность перерисовки графики зависит от объекта gameTime. Но еще раз повторяю, весь этот механизм работает самостоятельно и организовывает обновление состояния игры на автомате, стремясь достичь максимально возможной смены кадров в игре (FPS).
Такой шаблонный подход в конструкции классов Program и Game1 дает вам возможность сосредоточить свои силы на написании игры, а не на инициализации и создании окна, обработки циклов, объявлении кучи различных объектов для работы с DirectX и многом другом. Все это за вас уже сделали два класса Program, Game1, инструментарий XNA Game Studio Express и системные классы платформы XNA Framework. Расслабьтесь и наслаждайтесь написанием исходного кода игры. Исходный код этого примера вы найдете на диске в папке Code\Chapter5\FirstProject.

5.5. Запуск и перенос проекта на приставку Xbox 360

Для того чтобы запустить проект на приставке Xbox 360, откройте инструментарий Visual C# Express и пример FirstProject. Затем откомпилируйте исходный код проекта, выполнив команды Build ⇒ Build Solution или Build -> Rebuild Solution. После удачной компиляции проекта в нижней части окна инструментария Visual C# Express появится надпись Build succeeded, это говорит о том, что все готово к запуску и тестированию программы. В отличие от компьютерной систе мы, где вы можете по нажатии одной кнопки просмотреть результат свой работы
на мониторе, в проектах для Xbox 360 все обстоит гораздо сложнее.
Чтобы увидеть, как работает программа в режиме теста или отладки, вам придется сначала подключить приставку Xbox 360 к компьютеру или совместной с компьютером сети, а также подключить сам компьютер к Интернету. Затем войти с приставки Xbox 360 в сервис Xbox Live под своим именем и паролем. Далее с компьютера необходимо передать файлы на Xbox 360, и только потом вы сможете запустить тестируемый проект. В том случае если программа была ранее передана на приставку Xbox 360, то для ее запуска требуется лишь подключение Xbox 360 к сервису Xbox Live, без подключения компьютера к сети.
Все эти операции доступны только тем, кто оформил подписку клуба XNA Creators Club. Человеку со стороны запустить программу для Xbox 360 не удастся! Он сможет только писать исходный код программы и компилировать его на компьютере, и не более того! Для просмотра результатов работы на приставке Xbox 360 необходимо обязательно иметь подписку клуба XNA Creators Club и установленную на приставке программу XNA Game Launcher, которую можно скачать с Xbox Live бесплатно.
Механизм переноса программы на приставку нетрадиционен, поэтому предлагаю вам в пошаговом режиме четко изучить последовательность всех этапов этого процесса. В дальнейшем подразумевается, что вы имеете подключение к Интернету с компьютера, имеете настроенный сервис Xbox Live (см. главу 1), а также выполнили все описанные шаги в главе 4 по вступлению в клуб XNA Creators Club и скачали на приставку XNA Game Launcher

5.5.1. Пошаговая инструкция по переносу программ на Xbox 360
1. Итак, включаем приставку Xbox 360 и подключаем ее к Интернету. Включаем компьютер и подключаем его также к Интернету. И компьютер, и приставка в этот момент должны быть одновременно подключены к Интернету либо через Switch (что лучше всего), либо приставка подключена к компьютеру через сетевую карту. Вы обязаны иметь возможность независимого и одновременного выхода с обоих устройств в Интернет. Далее на компьютере запустите XNA Game Studio Express, откройте
проект FirstProject (из папки Code\Chapter5\FirstProject) и откомпилируйте его.
2. Очень важный момент – это настройка на компьютере своего брандмауэра.
Если вы используете брандмауэр Windows, то здесь проблем нет, при установке XNA Game Studio Express студия сама добавит себя и настроит.
А вот если у вас в системе имеется другое программное обеспечение, то очень важно настроить возможность обмена данными между компьютером, приставкой Xbox 360 и сервисом Xbox Live. Как известно, брандмауэр обязан блокировать неизвестные ему внешние подключения и запросы к компьютеру, в связи с чем он может заблокировать обмен данными между устройствами. Решается это довольно просто. В настройках брандмауэра необходимо добавить или включить в доверенное приложение студию XNA Game Studio Express, а также указать следующий путь к программе
C:\Program Files\Microsoft XNA\XNA Game Studio Express\v1.0\Bin\
XnaTrans.exe. На разных брандмауэрах делается это по-разному, поэтому общего совета по этому вопросу дать вам не могу. Единственное, что если у вас совсем не получается настроить брандмауэр должным образом, то просто отключите его на время передачи файлов и включите встроенный в систему брандмауэр, другого решения этой проблемы нет. Подробнее о настройке портов вы можете прочитать в справочной системе XNA Game
Studio Express в разделе Developing Xbox 360 ⇒ Games Deploying an Xbox 360 -> Game Third -> Party Firewall Settings.
3. Теперь переходим к приставке Xbox 360. На консоли выберите свой профиль (Gamertag) и войдите в сервис Xbox Live. На приставке перейдите на вкладку Игры, выберите ссылку Демонстрации и прочие, нажав кнопку А (рис. 5.5). Затем из списка установленных у вас на Xbox 360 игр и программ выберите название программы XNA Game Launcher, нажав кнопку А (рис. 5.6). Откроется следующее окно, в котором вам необходимо выбрать команду Запуск для запуска на приставке программы XNA Game Launcher (рис. 5.7).


Рис. 5.5. Вкладка Игры

Рис. 5.6. Выбор программы XNA Game Launcher из списка установленных программ на приставке

Рис. 5.7. Выбор команды запуска программы XNA Game Launcher

4. После этих действий экран телевизора несколько раз моргнет черным цветом. Если связь с Интернетом не очень хорошая, то возможно даже появление на несколько секунд экрана черного цвета. В данный момент приставка Xbox 360 соединяется с оответствующими сервисами клуба XNA Creator Club и идентифицирует вас как пользователя. Далее откроется главное окно программы XNA Game Launcher (рис. 5.8), где вам необходимо выбрать курсором джойстика команду Conect to Computer и нажать кнопку А. Текущая картинка на экране сменится новой картинкой, изображенной
на рис. 5.9. В этот момент приставка еще раз соединится с Xbox Live, и затем откроется новое окно, указывающее на готовность Xbox 360 получить файлы с компьютера (рис. 5.10).

5. Теперь вам необходимо вернуться к компьютеру и в окне инструментария Visual C# Express и открытого проекта FirstProject нажать правой кнопкой мыши на названии проекта, в появившемся контекстном меню выбрать команду Deploy, что означает передать файлы на приставку (рис. 5.11).
В этот момент приставка начнет получать файлы от компьютера, а на экране телевизора вы сможете наблюдать за процессом передачи файлов на консоль (рис. 5.12). Если программа очень большая, то дождитесь передачи всех файлов. Сигналом окончания передачи данных служит возврат к показу на экране телевизора заставки, ожидающей приема новых данных (рис. 5.10). А на компьютере в инструментарии Visual C# Express в его нижней части в строке состояний должна появиться надпись Deploy Suc ceeded. Теперь компьютер можно отключить от сети и Интернета, поскольку проектные данные уже переданы на приставку.


Рис. 5.8. Окно программы XNA Game Launcher

Рис. 5.9. Соединение с Xbox Live

Рис. 5.10. Ожидание передачи файлов с компьютера на приставку Xbox 360

Рис. 5.11. Выполняем на компьютере команду Deploy

Рис. 5.12. Передача файлов с компьютера на консоль

6. На приставке из окна ожидания передачи данных вам необходимо вернуться в главное меню программы XNA Game Launcher (нажмите на джойстике кнопку с буквой B), где необходимо выбрать команду My XNA Games (рис. 5.8). Выбор этой команды откроет окно My XNA Games со списком установленных или переданных ранее с компьютера программ (рис. 5.13). На рис. 5.13 вы видите, что кроме переданного на приставку
проекта FirstProject у меня на приставке уже установлены все примеры (и даже более), изучаемые в этой книге. В связи с этим я вам гарантирую полную работоспособность всех рассматриваемых проектов в этой книге на приставке Xbox 360! Далее на приставке в окне My XNA Games изберите курсором название проекта FirstProject и нажмите на джойстике кнопку с буквой A. В новом открывшемся окне FirstProject (которое в данном случае представляет тестируемую программу) запустите проект, выбрав команду Launch (рис. 5.14).


Рис. 5.13. Список установленных на приставке программ

Рис. 5.14. Запуск проекта FirstProject на консоли

7. После запуска проекта на экране вы увидите работу программы в полноэкранном режиме, как показано на рис. 5.15. На этом все шаги по переносу или передаче данных на приставку окончены, и вы можете наслаждаться работой программы или игрой. Не забывайте, что приставка обязательно должна быть подключена к сервису Xbox Live во время тестирования программы.


Рис. 5.15. Работа проекта FirstProject на приставке Xbox 360

5.6. Двойная буферизация

По умолчанию в своем первом проекте рабочее пространство проекта FirstProject мы закрасили в синий цвет. Это достигается посредством вызова метода Clear().
Параметр этого метода CornflowerBlue определяет синий цвет закраски экрана в программе, и, естественно, эту цветовую составляющую можно изменять по своему усмотрению. Чаще всего используют черный цвет (мы так и будем делать в следующих главах), а сама закраска экрана цветом – на самом деле целый отработанный механизм.

Для того чтобы задать цвет числовыми значениями, используйте следующую строку кода: graphics.GraphicsDevice.Clear(new Color(123, 56, 34);

Смысл механизма закрашивания экрана цветом состоит в том, чтобы перед показом нового кадра (фрейма) стирать содержимое экрана одним из цветов и рисовать графику вновь. То есть если вы рисуете на экране какой-то объект и затем желаете его переместить по экрану, то необходимо сначала стереть этот объект со старого места и нарисовать уже в новом месте. Метод Clear() выступает в роли стирательной резинки, очищая экран телевизора или монитора. Если не стирать экран цветом, то за движущимся объектом будет оставаться большой шлейф, состоящий из предыдущих сформированных кадров.
Более того, кроме первичной поверхности экрана, существует еще и вторичная поверхность, или так называемый вторичный буфер. Каждый последующий кадр игры формируется не на первичной поверхности экрана, а непосредственно во вторичном буфере. Когда приходит время показа очередного кадра, то происходит своего рода переключение между буферами, а старый буфер стирается цветом, и в нем выводится следующий кадр игры и т. д. Скорость переключения или смены буферов огромная и равна тем самым FPS, то есть …30–60… кадров в секунду.
Этот механизм позволяет создавать в приложениях плавную анимацию всего игрового процесса и носит название двойной буферизации. Количество дополнительных неэкранных поверхностей может достигать нескольких штук. Переключение между поверхностями происходит автоматически на уровне системы, поэтому следить за тем, какой из буферов в данный момент включен, а какой выключен, необходимости нет.

5.7. Механизм работы программы

Теперь поговорим о механизме работы программы на приставке. После того как вы откомпилировали и собрали программу, в рабочем каталоге проекта FirstProject в папке Code\Chapter5\FirstProject\bin\Xbox360\Release или Debug появляется готовая программа, которая в дальнейшем при выполнении команды Deploy в Visual C# Express передается на приставку Xbox 360. После запуска программы на консоли среда времени выполнения CLR ищет входную точку в приложении.
Этой точкой является метод main() класса Program. Как вы помните, выполнение этого метода приводит к запуску системного потока и созданию нового класса Game1.
В момент создания класса Game1 управление программой на какой-то момент переходит к файлу Game1.cs. Там происходит инициализация всех глобальных переменных класса Game1, а затем выполнение исходного кода конструктора класса. Как только класс Game1 создан, управление программой опять возвращается к классу Program и исходному коду файла Program.cs.
После этого в работу вступает метод game.Run() класса Program. Этот метод создает системный поток, в котором происходит выполнение соответствующих методов класса Game1. В частности, первым в дело вступает метод Initialize() класса Game1. В методе Initialize() происходит инициализация всех компонентов игры, которые в нем асположены. Затем управление програм мой переходит к методу LoadGraphicsContent(). Здесь происходит загрузка всей графической составляющей проекта, после чего в потоке, созданном методом game.Run() класса Program, происходит цикличное выполнение двух методов:
Update() и Draw().
Метод Update() постоянно следит за обновлением состояния игры, а метод Draw() рисует графику на экране телевизора. Работа этих методов выполняется до тех пор, пока не последует команда выхода из программы. Таким образом, механизм работы программы сводится к организации фактически бесконечного цикла, в котором происходит выполнение методов Update() и Draw() для постоянной смены состояния игры или цикличной смены кадров в этой самой игре.
Не так все и сложно на самом деле, не правда ли? Достаточно хорошо продумать общую концепцию структуры будущих классов и на базе механизма работы классов Program и Game1 реализовать свою идею. В дальнейшем мы так и будем поступать, с той лишь разницей, что параллельно изучению платформы XNA и XNA Game Studio Express мы будем создавать еще свою собственную небольшую игру.

5.8. Удаление программы с Xbox 360

Жесткий диск приставки не безразмерный, поэтому когда-то вам нужно будет все
равно подчистить диск и удалить ряд игр с консоли. Для удаления переданной программы на Xbox 360 необходимо подключиться к Xbox Live и войти в меню программы XNA Game Launcher (рис. 5.8). Затем выбрать в этом меню ссылку My XNA Games. Потом из списка установленных на приставке приложений выбрать удаляемую программу, выделив ее название курсором джойстика и нажав кнопку с буквой А. Далее, войдя на экран программы, изберите команду Delete. После выбора этой команды на экране телевизора или монитора появится дополнительная панель с подтверждением удаления выбранной программы (рис. 5.16). Для удаления игры изберите команду Delete Game. После этих действий игра моментально удалится с Xbox 360, а вы переместитесь в список установленных программ консоли.

Рис. 5.16. Удаление программы с консоли

5.9. Добавим информацию об игре на экран телевизора

Когда вы открываете игру на приставке Xbox 360, то с правой стороны от названия игры имеется небольшое по размеру окно, в котором разработчики помещают описание игры (рис. 5.13). Чтобы в своем проекте добавить такое описание, нужно выполнить несколько последовательных шагов.
Прежде всего откройте на компьютере с помощью Vicual C# Express любой проект. Как вы помните, в начале главы мы говорили о проектном файле AssemblyInfo.cs. Именно в этом файле добавляется информация о создателе игры, версии программы, ее описание и т. д. Добавить описание можно двумя способами. Первый способ подразумевает открытие файла AssemblyInfo.cs в текстовом редакторе Vicual C# Express и заполнение соответствующих полей. Для новичка этот вариант может показаться сложным, поэтому лучше начать с использования второго способа заполнения полей, а затем, когда вы поймете механизм описания проекта, можно использовать первый вариант.
Второй способ описания проекта значительно проще и дает возможность заполнить требуемые поля с помощью формы. Для того чтобы открыть в инструментарии необходимую форму, щелкните на названии проекта в Solution Explorer правой кнопкой мыши и выберите команду Properties. Откроется окно свойств текущего проекта (рис. 5.3). В этом окне нажмите кнопку Assembly Information. Откроется небольшая по размеру форма с одноименным названием, поля которой необходимо заполнить (рис. 5.17). Как видно на рис. 5.17, все поля представляют описательные свойства проекта.
После заполнения полей нажмите кнопку ОК и закройте панель свойств проекта. Теперь откройте в текстовом редакторе файл AssemblyInfo.cs и посмотрите, что, где и как изменилось. Когда разберетесь с имеющимися изменениями в этом файле, то в ледующий раз сможете набирать все данные прямо в AssemblyInfo.cs. Единственное, о чем еще нужно упомянуть, – это о GUID.
Если вы заметили, в форме Assembly Information (рис. 5.17) присутствовало поле с названием GUID. В этом поле был представлен набор цифр и букв. GUID – это уникальный идентификатор приложения, который XNA Game Studio Express генерирует специально для каждого проекта. В каждом новом проекте уникальный идентификатор будет новым. Для чего и почему используется такая система работы с GUID, не столь важно, важно другое обстоятельство.
Когда вы переносите на приставку игру, консоль идентифицирует каждую новую программу именно по GUID. Если номера совпадут, то приставка удалит старую игру и установит поверх нее новую. То есть если вы попытаетесь поверх ранее установленной игры на приставке установить новую игру с другим названием, но с одинаковым GUID, то Xbox 360 просто подменит имеющиеся файлы.
Об этом обязательно нужно помнить.


Рис. 5.17. Заполнение полей формы

В Vicual C# Express есть такая функция, как создание шаблона на базе текущего проекта. Если в открытом проекте Vicual C# Express выполнить команды Export Template, то текущий проект добавится в шаблоны инструментария и в дальнейшем при формировании проекта, в диалоговом окне создания проекта в области MyTemplates появится ваш шаблон. Создание нового проекта на базе такого вот шаблона сохранит в новом проекте ваш старый GUID, соответственно перенося на приставку новый проект, вы
сотрете любой другой ранее установленный проект, созданный на базе этого шаблона.

5.10. Формат HD

Простой кинескопный телевизор для сигнала типа PAL имеет стандартное разрешение от 640 × 480 пикселей и более. Эти цифры могут несколько видоизменяться в зависимости от типа сигнала и производителя устройства. Посмотрите на табл. 5.1, где даны основные разрешения по типам сигналов.
Не так давно был введен новый стандарт передачи телевизионного сигнала, известный как HD (High Definition – высокая четкость). Этот стандарт передает сигнал с очень высокой четкостью, и картинка по своему качеству получается просто потрясающей! Как правило, на таких телевизорах имеется надпись: HD или HDTV Ready.

Таблица 5.1. Разрешение экранов телевизоров и типы сигналов
Разрешение Тип сигнала
720 × 540 Std. NTSC 601
720 × 534 Std. NTSC DV/DVD
864 × 480 Wide NTSC DV/DVD
864 × 486 Wide NTSC 601
640 × 480, 768 × 576… Std. PAL
1024 × 576 Wide PAL
1280 × 720 HDTV 720p
1920 × 1080 HDTV 1028i/1028p

Как видно из табл. 5.1, для стандарта HD разрешение экранов равно величинам 1280 × 720 пикселей (720p) или 1920 × 1080 пикселей (1080i). Еще имеется формат 480p, но он в основном применяется в маленьких телевизорах. Эти значения разрешений для стандарта HD являются общепринятой спецификацией. Все производители обязаны обеспечить на своих изделиях с поддержкой HDTV как минимум отображение картинки в формате 720p или 1080i, либо и то и другое вместе.
Формат записи 720p и 1080i имеет свое техническое определение. Так, цифрыв этих обозначениях представляют количество строк на экране телевизора.
В свою очередь, английские буквы p и i обозначают соответственно чересстрочную (interlaced) и прогрессивную (progressive) развертку экрана телевизора.
Чересстрочная развертка пытается представлять на экране телевизора единовременно 60 кадров в одну секунду. Но поскольку все аналоговые телевизионные сигналы были ранее рассчитаны на 30 кадров в секунду, то чересстрочной развертке приходится робить сигнал на нечетные и четные строки и показывать их в одну секунду по тридцать раз каждую. Наш глаз соединяет четные и нечетные строки в один кадр, и на выходе мы имеем те самые 60 кадров в одну секунду.
Прогрессивная развертка технически позволяет показывать все 60 кадров за одну секунду. Этому типу развертки не нужно дробить строки на четные и нечетные, а вывод строк происходит последовательно от первой до последней строки.
Как правило, качество картинки в прогрессивной развертке значительно лучше и четче. Объекты в этом случае не дрожат, а их движения выглядят намного плавнее. Больше информации по этой теме вы сможете найти в русскоязычном Интернете. Например, на форуме сайта http://www.xboxrussia.ru или http://www.xboxland.net, где есть масса рекомендаций по выбору телевизора или монитора для Xbox 360.
На сайте http://www.xbox360.com есть также пояснения по формату HD, но, правда, на английском языке (рис. 5.18).


Рис. 5.18. Сайт Xbox 360 и раздел, посвященный HD

Все перечисленные спецификации относятся именно к жидкокристаллическим и к екоторым плазменным моделям телевизоров. Если вы увидите надпись HDTV Ready на кинескопном телевизоре, то это совсем не значит, что данный телевизор в полной мере может работать с HDTV. Точнее, этот телевизор имеет возможность получать сигнал в формате HD, и он умеет преобразовывать этот сигнал и показывать его на экране. Но поскольку в режиме работы HD-телевизор станет физически «втискивать» полученную картинку в свое разрешение экрана, то на экране телевизора сверху и снизу будут иметь место черные полосы, как при показе широкоформатного кинофильма.
Дополнительно для игры на Xbox 360 можно приобрести какой-нибудь из компьютерных LCD-мониторов, благо в Xbox 360 для этих целей имеется специальный VGA-кабель (приобретается отдельно).

5.10.1. Выбор оптимального разрешения экрана для наших проектов

Отличительной особенностью проектов для консоли Xbox 360 является подбор разрешения экрана. На самом деле вы можете задавать любое разрешение, и игра будет работать на приставке без проблем, но для корректного отображения картинки именно на экране телевизора (с поддержкой HD), а не монитора лучше избирать разрешение 1280 × 720 пикселей или 1920 × 1080 пикселей.
Для проектов под Xbox 360 нам необходимо выбрать одно из вышеозвученных разрешений экрана. Если этого не сделать, то XNA Game Studio Express автоматически установит разрешение экрана в 800 × 600 пикселей. В этом случае, на каком бы телевизоре вы ни запускали созданную игру, программа будет применять исключительно разрешение 800 × 600 пикселей.
Рабочим разрешением для всех последующих проектов этой книги была выбрана еличина в 1280 × 720 пикселей, или 720p. Все игры для приставки Xbox 360 имеют поддержку этого разрешения, но вы без проблем запустите любой проект из книги с 720p на кинескопном телевизоре, просто в этом случае у вас сверху и снизу будут стоять черные рамки. В табл. 5.2 перечислены разрешения экранов, рекомендуемые при разработке игр для приставки Xbox 360.

Таблица 5.2. Разрешения экранов для Xbox 360
Обозначение Разрешение
AV (Composite) 640×480
480p (Normal) 640×480
480p (Widescreen) 640×480
720p (Widescreen) 1280×720
1080i/1080p (Widescreen) 1920×1080

Чтобы задать разрешение экрана в 720p, в исходный код рассмотренного в этой главе проекта добавьте две новые строки.

public Game1()
{
graphics = new GraphicsDeviceManager(this);
content = new ContentManager(Services);
graphics.PreferredBackBufferWidth = 1280;
graphics.PreferredBackBufferHeight = 720;
}

Этими новыми строками исходного кода мы устанавливаем соответственно ширину и высоту экрана в 1280 и 720 пикселей.
Интересной особенностью Xbox 360 является автоматическое изменение размеров графики под разрешение экрана. Так, если вы нарисовали своих героев под 1080i, а потом попытаетесь выставить и запустить игру на 720p, то Xbox 360 в автоматическом режиме ужмет без потерь (или с минимальными потерями) все графические элементы сцены и постарается представить их в выгодном свете.

5.11. Распространение игр, написанных для Xbox 3
С распространением Windows игр, сделанных в студии XNA Game Studio Express, особых проблем нет. Вы должны создать простой инсталляционный пакет и установить игру на другой компьютер (в книге по Windows изучается создание инсталля ционного пакета). Либо просто перенести на другой компьютер файл EXE и все игровые компоненты приложения, а затем запустить игру на этом компьютере.
Перенос программ, созданных исключительно для Xbox 360, на другую приставку в версии XNA Game Studio Express 1.0 от 11 декабря 2006 года предусмотрен не был. В той первой версии, чтобы запустить игру на другой приставке, необходимо было перенести на другой компьютер весь проект, включая исходные коды, открыть этот проект в XNA Game Studio Express, откомпилировать его и передать на консоль.
Не всех устраивал такой подход в распространении программ, поэтому в версии XNA Game Studio Express 1.0 Refresh был добавлен новый механизм упаковки игр (без исходных кодов, только исполняемый файл и все игровые компоненты приложения) с возможностью последующего переноса этого установочного пакета на другую приставку. В этом варианте распространения файлов уже нет необходимости в компиляции проекта на другом компьютере, достаточно просто оформить подписку в XNA Creators Club и передать упакованную игру с компьютера на приставку.
Для того чтобы создать такой установочный пакет, необходимо в XNA Game Studio Express 1.0 Refresh выполнить всего одну команду. Например, в нашем первом рассмотренном проекте FirstProject (после компиляции, отладки и проверки программы на своем компьютере и приставке) нужно выполнить команды Build -> Package FirstProject as XNA Creators Club Game. По выполнении этой команды в рабочем каталоге проекта в папке \bin\Xbox360\Debug(Realese) появится новый файл, в данном случае с названием FirstProject-Xbox360 (рис. 5.19).


Рис. 5.19. Упакованный проект FirstProject

Для того чтобы запустить упакованную таким образом программу на другой приставке Xbox 360 (с подпиской XNA Creators Club), необходимо просто перенести на компьютер пользователя эту программу и выполнить все действия, описанные в разделе 5.5. И при этом задействовать XNA Game Studio Express 1.0 Refresh не нужно, достаточно просто запустить на компьютере перенесенную программу на исполнение и нажать в появившемся диалоговом окне XNA Game Studio Express Package Utility кнопку Unpack (рис. 5.20). После чего игра автоматически будет передана на приставку пользователя.

Для Windows-приложений, написанных в XNA Game Studio Express 1.0
Refresh, также возможно использование вышеописанного механизма, но выполнение команды на исполнение просто запустит программу на компьютере пользователя.


Рис. 5.20. Запуск упакованной программы на исполнение

Категория: Разработка игр | Добавил: G-GURU (10.04.2011)
Просмотров: 7577 | Рейтинг: 5.0/1 |
Вы можете отправить сообщение на e-mail друга:

Интересное геймерам:

Смотрите другие материалы по темам: XNA Game Studio, Studio, Xbox 360, 360, Разработка игр, Game, Xbox, XNA, C#, C++.

Также вам предлагаются схожие с «Создаём двухмерную игру: Первый проект [Xbox 360]» материалы:

Если понравился материал «Создаём двухмерную игру: Первый проект [Xbox 360]» и вы можете обсудить его ниже.

Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Поиск информации
Игровые братья
Создание игр, Конструкторы игр, Игровые движки Перевод консольных игр Разработка игр в СНГ Пранк - телефонные шутки
10 новых описаний
Disney и Epic Games: Слияние Миров и Рождение Новой Эры Развлечений
Oculus Quest2\Pro используется для обучения огнемётчиков на войну
Про Starforce, Cadmus сервер, Браузерные игры
Ставки на спорт: основные и альтернативные площадки MostBet
Будьте в курсе всех требований к монетизации блога в 2024 году
Взгляд на игровые новинки: от бесплатной раздачи в Steam до перемен в PlayStation
Импортозамещение государственных машин процессорами Baikal
Криптовалюта: какую выбрать для вложения и заработка
Онлайн игра World of Sea Battle для настоящих морских волков
Лучшие подкасты для максимальной монетизации вашего блога
Что означает Закон ЕС о цифровых рынках (DMA) для разработчиков игр
Время превратить вашу страсть в прибыль! Монетизируйте свой блог
Как пополнить баланс игрового аккаунта Steam в России
Лучшие настольные игры: Зомбицид, Колонизаторы, Монополия и др.
Премиум-резидент прокси – С неограниченной пропускной способностью
Все права сохранены за сайтом GFAQ.ru © 2024. Games Frequently Asked Questions
Полные прохождения, Секреты, Коды, Пароли, Советы, Уловки, Читы, Описания для Компьютерных и Консольных Игр. Хостинг от uCoz
Обращаем особое внимание на то, что при цитировании и размещении данных текстовых материалов, обязательно прикрепляйте ссылку на официальный сайт "GFAQ.ru".