|
|
В этом уроке мы покажем, как создать
простой эффект взрыва, когда снаряд попадает в цель, в землю или просто
заканчивается время его "жизни". rem
Создаем эффект взрыва Load
3Dsound "Explode.wav",3 Эти строки кода надо поместить в начало программы, где мы загружаем объекты, звуки и изображения. Здесь мы создаем объекты, используемые для эффекта взрыва. Заметьте, что мы применяем ту же текстуру, что и для создания огня в шлейфе. Мы также загрузили звуковой файл, который будем использовать в качестве источника звука взрыва. if
Mouseclick()=1 and Explode =0 Как видите, мы добавили в программу переменную "Explode". Проверяем, не произошел ли взрыв. Если взрыв происходит в данный момент, то не будем выстреливать еще один снаряд, потому что это может резко обрезать звук взрыва, уменьшая действие эффекта. Мы также установили интервал, через который снаряд может быть снова выпущен. Новый снаряд можно будет выстрелить, если при проверке окажется, что время "жизни" снаряда меньше 50. Это сделано для того, чтобы убедиться, что снаряд находится достаточно далеко, и отсутствие эффекта взрыва не будет замечено игроком. if bY# < Get Ground height(1,bX#,bZ#) then BulletLife=0 Эта строка кода находится в подпрограмме "ShootBullet". Она проверяет, не попал ли снаряд в землю, и устанавливает значение переменную "BulletLife" равное 0 при положительном результате. if
BulletLife = 0 Эта часть кода также находится в подпрограмме "ShootBullet". Код выполняется после того, как время "жизни" снаряда установлено равным 0, либо по причине столкновения с чем-либо, либо по причине окончания "жизни" снаряда. При этом убираются все объекты шлейфа, равно как и сам объект "снаряд". Переменной взрыва присвоено значение 20 для начала отсчета взрыва. If Explode > 0 then Gosub ExplodeRocket Эта строка кода располагается в нашем основном цикле. Если счетчик взрыва больше 0, то для выполнения кода взрыва вызывается подпрограмма "ExplodeRocket". Rem Взрыв
снаряда Подпрограмма "ExplodeRocket"
производит взрыв. В место попадания снаряда мы помещаем две сферы, созданные для
эффекта взрыва. Затем мы рассчитываем коэффициент масштабирования взрыва и
сохраняем его в переменной "EScale". Затем масштабируем первую сферу и вращаем
ее со скоростью, уменьшающейся по мере того, как сфера становится больше. То же
самое мы делаем со второй сферой, только ее мы масштабируем с меньшей скоростью,
чем первую сферу, а вращаем с большей скоростью, основанной на значении
"Explode". После этого мы применяем команду "Dec" для уменьшения значения
"Explode" на единицу. Потом проверяем, равно ли значение этой переменной 0. Если
оно равно 0, обе сферы взрыва убираются. Заметьте, что мы использовали
двоеточие, чтобы выполнить две команды "HideObject" в одной строке. Мы могли бы
применить сравнение "If … EndIf", но двоеточие в качестве разделителя делает наш
код короче и легче читаемым. Следующие строки кода создают звуковой эффект,
когда вы сначала видите, как что-то происходит вдали, а затем слышите взрыв.
Далее код задает ожидание, пока значение счетчика не достигнет 18, и только
после этого начинает воспроизводить звук. Программа помещает источник звука в
конечной точке полета снаряда. Когда счетчик достигает 15, источник звука
перемещается в координаты камеры, что создает эффект отдаленного взрыва. За счет
того, что используется команда "Play Sound", а не "Loop Sound", звук
воспроизводится только один раз. |