Назад

   В этом уроке мы покажем, как создать простой эффект взрыва, когда снаряд попадает в цель, в землю или просто заканчивается время его "жизни".
 

 rem Создаем эффект взрыва
Make Object Sphere 30,20
texture object 30,2
ghost object on 30
Hide Object 30
Make Object Sphere 31,20
texture object 31,2
ghost object on 31
Hide Object 31

Load 3Dsound "Explode.wav",3
 

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

 if Mouseclick()=1 and Explode =0
  if BulletLife<50
   Position object 2,X#,Y#-7,Z#
   Set object to camera orientation 2
   BulletLife =120
   show object 2
   Loop sound 2
  Endif
 Endif

Как видите, мы добавили в программу переменную "Explode". Проверяем, не произошел ли взрыв. Если взрыв происходит в данный момент, то не будем выстреливать еще один снаряд, потому что это может резко обрезать звук взрыва, уменьшая действие эффекта. Мы также установили интервал, через который снаряд может быть снова выпущен. Новый снаряд можно будет выстрелить, если при проверке окажется, что время "жизни" снаряда меньше 50. Это сделано для того, чтобы убедиться, что снаряд находится достаточно далеко, и отсутствие эффекта взрыва не будет замечено игроком.

   if bY# < Get Ground height(1,bX#,bZ#) then BulletLife=0

Эта строка кода находится в подпрограмме "ShootBullet". Она проверяет, не попал ли снаряд в землю, и устанавливает значение переменную "BulletLife" равное 0 при положительном результате.

  if BulletLife = 0
   Hide object 2
   stop sound 2
   for x=10 to 20
    hide object x
   next x
   Explode = 20
  endif

Эта часть кода также находится в подпрограмме "ShootBullet". Код выполняется после того, как время "жизни" снаряда установлено равным 0, либо по причине столкновения с чем-либо, либо по причине окончания "жизни" снаряда. При этом убираются все объекты шлейфа, равно как и сам объект "снаряд". Переменной взрыва присвоено значение 20 для начала отсчета взрыва.

If Explode > 0 then Gosub ExplodeRocket

Эта строка кода располагается в нашем основном цикле. Если счетчик взрыва больше 0, то для выполнения кода взрыва вызывается подпрограмма "ExplodeRocket".

 Rem Взрыв снаряда
ExplodeRocket:
 Position object 30,bX#,bY#,bZ#
 Show object 30
 Position object 31,bX#,bY#,bZ#
 Show object 31
 EScale=20*(30-Explode)
 Scale object 30,EScale,EScale,EScale
 Yrotate object 30,WrapValue(Explode*37)
 Scale object 31,EScale/1.5,EScale/1.5,EScale/1.5
 Yrotate object 31,WrapValue(359-Explode*37)
 Dec Explode
 If Explode = 0 then hide object 30: Hide object 31
 If Explode=18
  position sound 3,bX#,bY#,bZ#
  play sound 3
 endif
 If Explode < 15 then position sound 3,X#,Y#,Z#
Return

Подпрограмма "ExplodeRocket" производит взрыв. В место попадания снаряда мы помещаем две сферы, созданные для эффекта взрыва. Затем мы рассчитываем коэффициент масштабирования взрыва и сохраняем его в переменной "EScale". Затем масштабируем первую сферу и вращаем ее со скоростью, уменьшающейся по мере того, как сфера становится больше. То же самое мы делаем со второй сферой, только ее мы масштабируем с меньшей скоростью, чем первую сферу, а вращаем с большей скоростью, основанной на значении "Explode". После этого мы применяем команду "Dec" для уменьшения значения "Explode" на единицу. Потом проверяем, равно ли значение этой переменной 0. Если оно равно 0, обе сферы взрыва убираются. Заметьте, что мы использовали двоеточие, чтобы выполнить две команды "HideObject" в одной строке. Мы могли бы применить сравнение "If … EndIf", но двоеточие в качестве разделителя делает наш код короче и легче читаемым. Следующие строки кода создают звуковой эффект, когда вы сначала видите, как что-то происходит вдали, а затем слышите взрыв. Далее код задает ожидание, пока значение счетчика не достигнет 18, и только после этого начинает воспроизводить звук. Программа помещает источник звука в конечной точке полета снаряда. Когда счетчик достигает 15, источник звука перемещается в координаты камеры, что создает эффект отдаленного взрыва. За счет того, что используется команда "Play Sound", а не "Loop Sound", звук воспроизводится только один раз.

 

Hosted by uCoz