Сегодня мы научимся добавлять в проект звуковые эффекты. В нашей игре таких эффектов всего два. Один будет проигрываться при столкновении метеорита и космического корабля, а второй – при окончании игры. В целом же работа со звуком в XNA Game Studio Express строится на использовании утилиты Microsoft Cross-Platform Audio Creation Tool или просто XACT. Эта межплатформенная утилита позволяет создавать отдельные звуковые проекты, которые впоследствие можно встроить в игру как для ПК, так и для Xbox 360. Все проекты с использованием XACT создаются по одному правилу: необходимо произвести стандартный набор операций и у вас на руках окажется готовый звуковой проект. Нам сейчас главное разобраться с общим принципом работы проектов XACT, а затем вы сможете встраивать в игры любое количество звуковых эффектов или отдельных мелодий.
Рис. 1
Создаем проект XACT
Прежде чем создавать проект XACT, необходимо подготовить все звуковые файлы, которые вы собираетесь использовать в игре. Сама утилита Microsoft Cross-Platform Audio Creation Tool работает только с тремя звуковыми форматами: WAV, AIF и AIFF. В игре используются два звуковых файла в формате WAV, которые взяты с сайта разработчиков игр. В частности из игры «Катапульта», доступной для бесплатного скачивания.
Вот общий алгоритм действий по созданию проекта XACT и добавлению его в программу. Вы создаете определенное количество звуковых файлов и добавляете их в свой проект. Затем с помощью программы Microsoft Cross-Platform Audio Creation Tool создается XACT-проект, в котором выполняется несколько простых действий. Когда все операции выполнены, следует сохранить проект XACT в рабочем каталоге в том месте, где хранятся звуковые файлы. После этого начинается работа над исходным кодом, в котором необходимо описать еще несколько стандартных действий для воспроизведения в игре звуковых эффектов.
Рис. 3
Сперва мы рассмотрим механизм создания проектов XACT на примере нового проекта, который как всегда находится на DVD-диске этого номера журнала. Создайте в каталоге рабочего проекта Audio в папке Content новую папку с названием Sound. Для добавления звуковых файлов в панели Solution Explorer щелкните правой кнопкой мыши по названию папки Sound и в контекстном меню выберите команды Add и далее – Exiting Item. Откроется диалоговое окно Add Exiting Item. В этом окне в списке Files of Types нужно выбрать тип Audio files и найти на вашем компьютере звуковые файлы (рис. 1). После этого в рабочем каталоге проекта в папке Sound у вас появятся новые звуковые файлы. Далее переходим к работе с утилитой Microsoft Cross-Platform Audio Creation Tool. Чтобы открыть утилиту, выполните на компьютере команды «Пуск», далее – «Все программы», затем – Microsoft XNA Game Studio Express, потом – Tools, а в конце – Microsoft Cross-Platform Audio Creation Tool. Откроется рабочее окно утилиты, где и будет происходить вся основная работа. Теперь необходимо в рабочем окне утилиты поочередно выполнить команды. Сначала в линейке меню выберите команду Wave Banks и далее New Wave Bank, а затем команду Sound Banks и далее New Sound Bank. Итогом этих операций станет открытие двух пустых окон в рабочей области Microsoft Cross-Platform Audio Creation Tool (рис. 2). Затем нажмите правой кнопкой мыши в окне Wave Bank. Откроется контекстное меню, где необходимо выполнить команду Insert Wave File (рис. 3). Это откроет простое диалоговое окно выбора файлов. Проследуйте в этом окне в каталог вашего рабочего проекта в папку Sound и выберите ранее добавленные два звуковых файла. Оба этих файла моментально отобразятся в окне Wave Bank (рис. 4). Выделите курсором мыши два добавленных файла в окне Wave Bank и перетащите эти файлы в окно Sound Bank, непосредственно в часть окна с названием Cue Name. После перетаскивания файлов их названия появятся в Cue Name (рис. 5). Клик мыши на любом из файлов откроет более подробную информацию о звуковом файле во всех текстовых частях окна Sound Bank. Затем выберите в меню утилиты команду File и далее Save Project As и в появившемся диалоговом окне Save Project As проследуйте в каталог вашего проекта в папку Sound (рис. 6). В поле этого окна – «Имя файла», задайте любое название и нажмите кнопку «Сохранить». Итогом всех этих незамысловатых действий станет создание проектного файла Sound.xap, который и содержит всю информацию о звуковых данных текущего проекта. В момент компиляции в работу вступит Content Pipeline, который своими внутренними сервисами на основе проектного файла Sound.xap произведет преобразование всех звуковых файлов проекта в три специфических файла Wave Bank.xwb, Sound Bank.xsb и Sound.xgs.
Рис. 4
Класс для работы со звуком
В игре для работы со звуковыми данными лучше создать отдельный класс, который вы всегда можете со временем усовершенствовать, а также использовать в любых других своих проектах. Так мы и поступим – возьмем уже готовое решение, которое было создано мною еще при написании книг по программированию игр для ПК и Xbox 360. Откройте проект Audio и внимательно изучите исходный код класс Sound. В звуковых проектах, основанных на XACT, всегда используются объекты трех классов AudioEngine, SoundBank и WaveBank. Объявление и создание этих объектов, а также загрузка звука в игру происходит в одном и том же ключе. Посмотрите на ниже приведенные строки исходного кода.
private static AudioEngine engine;
private static SoundBank soundbank;
private static WaveBank wavebank;
…
public static void Initialize()
{
engine = new AudioEngine(“Content\\Sound\\Sound.xgs");
soundbank = new SoundBank(engine, “Content\\Sound\\Sound Bank.xsb");
wavebank = new WaveBank(engine, “Content\\Sound\\Wave Bank.xwb");
}
Рис. 5
В трех первых строках этого блока кода происходит объявление трех объектов. Затем идет создание объектов в методе Initialize(). Это стандартная процедура по созданию объекта классов AudioEngine, SoundBank и WaveBank, которые призваны подгружать имеющиеся звуковые данные. Теперь, чтобы воспроизвести любой файл в игре, необходимо просто вызвать метод PlayCue() в классе Game1, а в качестве параметра указать название файла для воспроизведения, например:
Sound.PlayCue(soundList.Explosion);
Таким нехитрым способом вы сможете воспроизводить любые звуковые данные в игре! Более того, кроме метода PlayCue(), в классе есть еще три метода, как говорится, на все случаи жизни. Первый из них, Stop(), позволяет останавливать воспроизведение любого выбранного звукового файла.
public static void Stop(Cue cue)
{
cue.Stop(AudioStopOptions.Immediate);
}
Второй метод CuePlay() позволяет воспроизводить файл после его остановки.
В параметр этого метода необходимо просто передать название структурной переменной, которая отвечает за один из звуковых файлов. Последний очень важный метод с названием Update() постоянно обновляет работу звукового движка игры.
public static void Update()
{
engine.Update();
}
Рис. 7
Вызов этого метода в дальнейшем должен производиться непосредственно в классе Game1 в методе Update(). Теперь давайте перейдем к классу Game1 и воспроизведем в игре взрыв.
Воспроизведение взрыва
Первым делом в классе Game1 нужно воспользоваться методом Sound.Initialize(), чтобы создать объекты AudioEngine, SoundBank и WaveBank в исходном коде игры.
protected override void Initialize()
{
…
Sound.Initialize();
base.Initialize();
}
Затем мы переходим к игровому циклу и вызываем там метод Sound.Update(). Как вы помните, этот метод обновляет работу всего звукового движка. У нас в игре имеются два звуковых файла, но пока что мы будем использовать только звук взрыва, а уже в следующей части добавим и воспроизведение звука по окончании игры. Чтобы воспроизвести взрыв, нужно вызвать метод PlayCue в том месте, где работает детектор столкновений. То есть нужно поместить вызов этого метода в метод Collisions():
if (bbShip.Intersects(bbMeteorite))
{
meteorite.spritePosition = new Vector2(rand.Next(10, screenWidth - 100), -500);
life -= 1;
Sound.PlayCue(soundList.Explosion);
}
Здесь все очень просто. Как только происходит столкновение метеорита и космического корабля, игра воспроизводит звуковой эффект для взрыва. Запустите изученный сегодня проект на приставке Xbox 360 и посмотрите, как все работает. Вы можете добавлять в игру неограниченное количество различных звуковых эффектов, а принцип действия у всех проектов XACT, как вы помните, одинаковый. На этом все, и уже в следующей публикации мы закончим работать над игрой!
Рис. 2Рис. 7<<6-я часть «Игры своими руками»8-я часть «Игры своими руками»>>
785 Прочтений • [Игра для Xbox 360 своими руками. Часть 7] [12.04.2012] [Комментариев: 0]