Чтение онлайн

ЖАНРЫ

Программирование КПК и смартфонов на .NET Compact Framework

Климов Александр Петрович

Шрифт:

tomatoes[i].visible = false;

// отражаемся вниз

goingDown = true;

// обновляем счет

scoreValue = scoreValue + 10;

messageString = "Счет: " + scoreValue;

break;

 }

}

За каждый уничтоженный томат начисляется 10 очков. Эти данные постоянно обновляются и выводятся на экран.

Звуковые эффекты

Неплохо

бы добавить в игру звуковые эффекты. К сожалению, библиотека .NET Compact Framework пока не поддерживает воспроизведение звуковых файлов при помощи управляемого кода. Поэтому придется воспользоваться механизмом Platform Invoke (P/Invoke). В главе, посвященной вызовам функций Windows API, эта тема будет освещаться подробнее

Для воспроизведения звуков можно встроить звуковой файл в саму программу, как это делалось с изображениями, либо проигрывать сам звуковой файл, который расположен где-то в файловой системе.

В этом проекте требуется создать отдельный класс для воспроизведения звуков. Нужно щелкнуть правой кнопкой мыши на проекте

Bouncer
в окне
Solution Explorer
и выполнить команду контекстного меню
Add►New Item...
В открывшемся окне нужно выбрать элемент
Class
и задать имя
Sound.cs
. После нажатия кнопки
Add
новый класс будет добавлен в проект.

Класс

Sound
будет иметь два метода. Один метод создает экземпляр класса
Sound
, читая данные из заданного файла. Второй метод предназначен для проигрывания звука. Также в составе класса будет находиться свойство, позволяющее настраивать громкость звука.

В начале файла

Sound.cs
надо расположить строки для подключения используемых пространств имен, как показано в листинге 11.36.

Листинг 11.36

using System.Runtime.InteropServices;

using System.IO;

Наш пример со звуком просто хранит в памяти байтовый массив с аудиоматериалом. Для обращения к этому блоку используется функция операционной системы, способная производить звуки. В классе

Sound
блок памяти объявляется так, как показано в листинге 11.37.

Листинг 11.37

/// <summary>

/// массив байтов, содержащий данные о звуке

/// </summary>

private byte[] soundBytes;

Эта конструкция не создает массив, а только объявляет его. Массив будет создан при конструировании экземпляра класса, ведь изначально размер звукового файла неизвестен.

Код конструктора приведен в листинге 11.38.

Листинг 11.38

/// <summary>

/// Создание экземпляра sound и хранение данных о звуке

/// </summary>

/// <param name="soundStream">поток для чтения звука</param>

public Sound(Stream soundStream) {

 // создаем массив байтов для приема данных

 soundBytes = new byte[soundStream.Length];

 //
читаем данные из потока

 soundStream.Read(soundBytes, 0, (int)soundStream.Length);

}

Поток связывается с файлом или другим источником данных. Он имеет свойство

Length
, определяющее размер массива. Метод
Read
применяется для получения информации, после чего прочитанные байты сохраняются в массиве. Звуковые файлы хранятся в виде ресурсов, как и изображения.

В проект надо добавить звуковые файлы

click.wav
и
burp.wav
и для их свойства
Build Action
задать значение
Embedded Resources
. Теперь доступ к звуковым файлам получить очень просто, что иллюстрирует код, приведенный в листинге 11.39.

Листинг 11.39

/// <summary>

/// Звук, воспроизводимый при столкновении с батоном хлеба

/// </summary>

private Sound batHitSound;

/// <summary>

/// Звук, воспроизводимый при столкновении с помидором

/// </summary>

private Sound tomatoHitSound;

// Получим звук при столкновении с батоном хлеба

batHitSound = new Sound

 (execAssem.GetManifestResourceStream(@"Bouncer.click.wav"));

// Получим звук при столкновении с помидором

tomatoHitSound = new Sound

 (execAssem.GetManifestResourceStream(@"Bouncer.burp.wav"));

Для воспроизведения звука в класс

Sound
надо добавить метод
Play
, как показано в листинге 11.40.

Листинг 11.40

/// <summary>

/// Управление звуком в игре (Включать или выключать)

/// </summary>

public static bool Enabled = true;

/// <summary>

/// Проигрываем звук

/// </summary>

public void Play {

 if (Sound.Enabled) {

WCE_PlaySoundBytes(soundBytes, IntPtr.Zero,

(int)(Flags.SND_ASYNC | Flags.SND_MEMORY));

 }

}

Метод

Play
проверяет флаг переменной
Enabled
. С его помощью можно легко включать или выключать звук в игре. Воспроизведение звука обеспечивается вызовом функции Windows API
WCE_PlaySoundBytes
, что иллюстрирует код, приведенный в листинге 11.41.

Поделиться с друзьями: