Назад

   В предыдущем уроке мы показали, как можно создать снаряд и стрелять. А сейчас добавим звуковые эффекты, чтобы выстрел в игре был более натуральным. Поскольку мы будем достаточно часто использовать переменные "CameraAngle", мы сократили их до аббревиатуры "cA" для удобства чтения кода.
 

 Load sound "crickets.wav",1
 Loop sound 1

 

Прежде чем мы рассмотрим 3D-звук, нам не помешает добавить в игру какой-нибудь звук окружающей среды. Команда "Load Sound" загружает звук в программу, но не воспроизводит его. Первый параметр этой команды - имя загружаемого звукового файла. Как и в любой другой команде, где требуется указывать имя файла, имя файла должно быть заключено в кавычки. Второй параметр команды - присвоенный этому звуку номер. DarkBASIC использует этот номер точно так же, как и при загрузке объектов или изображений. Номер является уникальным идентификатором для этого звука. Команда "Loop Sound" использует один параметр, номер воспроизводимого звука. Эта команда постоянно воспроизводит указанный звуковой файл. Понадобилось всего две команды, чтобы озвучить игру стрекотанием сверчков!

 Load 3Dsound "fireball2.wav",2

Команда "Load 3DSound" загружает звук выстреливаемого снаряда. Первый параметр этой команды - имя загружаемого звукового файла, а второй параметр - присвоенный этому звуку номер. Загружая трехмерный звук, мы сообщаем DarkBASIC, что желаем поместить источник звука в определенной точке 3D-сцены.

 Rem Поворачиваем камеру
 if cAX#>270
  if cAX#-270 > 90 then cAX#=270
 else
  if cAX# > 90 and cAX#-270<270 then cAX#=90
 endif
 YRotate camera CurveAngle(cAY#,oldcAY#,24)
 XRotate camera CurveAngle(cAX#,oldcAX#,24)
 

Эта часть кода добавлена в игровую программу для того, чтобы игрок случайно не перевернул камеру. Углы камеры также должны содержать корректную информацию для правильного позиционирования слушателя 3D-звука.
 

 Rem Позиционируем слушателя
 Position Listener X#,Y#+50,Z#
 Rotate Listener 0,cameraAngleY#,0
 

Команда "Position Listener" используется для позиционирования источника звука. Три параметра после команды обозначают координаты X, Y и Z, где вы хотите поместить слушателя. Мы будем использовать ту же позицию, в которой расположена камера. Команда "Rotate Listener" служит для поворота слушателя. Ее параметры - это углы X, Y и Z. Чтобы направление слушателя совпадало с направлением камеры, мы оставим значения углов X и Z равными 0, и будем учитывать только вращение вокруг оси Y. Для определения значения Y используем переменную "CameraAngleY#".

 Rem Выстреливаем снаряд
 if Mouseclick()=1 and BulletLife=0
  Position object 2,X#,Y#+43,Z#
  Set object to camera orientation 2
  BulletLife =25
  show object 2
  Loop sound 2
 Endif

В код, где мы проверяем, была ли нажата кнопка мыши, мы добавили команду "Loop sound", чтобы начал воспроизводиться звук выстреливаемого снаряда. Этот звук будет длиться до тех пор, пока не будет остановлен кодом, который проверяет время "жизни" снаряда.

 If BulletLife > 0
  Dec BulletLife
  Move object 2,20
  bX#=Object position X(2)
  bY#=Object position Y(2)
  bZ#=Object position Z(2)
  Position sound 2,bX#,bY#,bZ#

  if BulletLife = 0
   Hide object 2
   stop sound 2
  endif
 Endif

 

В код стрельбы мы добавили две команды для обработки позиции и окончания звука. Команда "Position Sound" используется для размещения звука летящего снаряда в указанных 3D-координатах. Первый параметр этой команды - номер позиционируемого звука. Следующие три параметра определяют позицию, в которую помещен источник звука. Мы получили значения координат X, Y и Z снаряда и сохранили их в переменных "'bX#", "bY#" и "bZ#". Это и есть значения, используемые нами для позиционирования источника звука снаряда. Как только программа определит, что величина "BulletLife" достигла значения 0, применяется команда "Stop Sound" для прекращения воспроизведения звука.

 

Hosted by uCoz