Итак.
Camera Shake – это такой эффект тряски экрана. Он очень хорошо
позволяет привлечь внимание игрока к какому то событию. Будь то
появление большого босса под ногами которого трясется земля или какой
ни будь взрыв. В общем любое событие претендующее на глобальность.
Как это устроено. Все крайне просто. У камеры как у любого объекта есть
координаты X и Y. И наша задача изменять их, а потом возвращать камеру
в прошлое (стандартное) положение. И так несколько раз.
Как это сделать. Давайте по шагам.
Для начала нам нужен объект камеры. Вообще создание любой игры лучше
начинать с создания камеры. Вы можете создать несколько камер что бы
переключатся между ними в процессе игры. Может вам захочется сделать
CutScene в начале или конце уровня, не важно, объект основной камеры
нужен обязательно в каждой игре.
Создаем объект под название camera_1.
И определяем для него некоторые переменные в событии Create
State – это переменная будет отвечать за состояние камеры. 0 –
стандартное состояние когда камера стоит на месте что бы не случилось.
1 – когда камера следует за игроком. 2 – когда камера трясется
Shake_control - отслеживает камеру во время тряски. Когда это значение
будет равно определенному то трясти перестанем и переведем камеру в
прошлый State
X_Previous и Y_Previous будут запоминать положение камеры до начала
тряски
Shake_state – будет определять продолжительность тряски
Итак.
Переменные определили. Теперь привяжем камеру к комнате.
Открываем комнату и идем на закладку Views. Проставляем все галочки. И
определяем размер экрана. К примеру 640 на 480. Теперь ищем ниже пункт
Object Following. Там говорим что следовать за нашим объектом camera_1.
Далее в уме делим установленный нами размер экрана на 2 и вписываем эти
значения в HBor и VBor, в нашем случае пишем 320 на 240. После этого
перемещением игрового экрана будет управлять именно наша камера.
Далее.
В папочке Scripts создаем скрипт с названием shake_script (название
может быть любое. И в него уже пишем следующий код:
{
camera_1.shake_control += 1; //каждый шаг прибавляем по еденичке что бы
отследить когда заканчивать тряску.
camera_1.x = camera_1.x_previous; //Возвращаем камеру
camera_1.y = camera_1.y_previous; // В предыдущее место (до тряски)
if camera_1.shake_control = argument0 then //Определяем равно ли
значение shake_control заданному нами значению.
{
camera_1.state = 1; // Если они совпадают то переводим камеру в режим
следования за игроком и завершаем скрипт
exit
}
Else //Если не равно…
{
camera_1.x += random (50); //Перемещаем камеру на на любое количество
пикселей от 1 до 50 по оси X
camera_1.y += random (50); //тоже самое по оси Y
}
}
Итак скрипт готов. Сохраняем его и пользуемся себе на радость.
Далее
В событии Step создаем код который будет отслеживать текущее состояние
камеры и выполнять с ней соответствующие действия:
{
if camera_1.state = 1 // Если камера в режиме следования за игроком, то
записываем ее координаты и говорим что ее настоящие координаты такие
какие на данный момент у персонажа игрока. Так же тут мы сбросим
счетчик тряски на 0
{
x = Player.x;
y = Player.y;
id.x_previous = x;
id.y_previous = y;
id.shake_control = 0;
}
if camera_1.state = 2 then //Если мы вошли в режим тряски, то запустить
потрясти камеру столько сколько указано в shake_state
{shake_script(shake_state);
}
}
Для примера можем на кнопку 1 на нумпаде забить установку значения
переменной shkae_state на 10 и посмотреть все в игре.
{
id.state = 2;
id.shake_state = 10;
}
Вот так мы запускаем нашу тряску. Вписав этот код в событие нажатия на
кнопку «1» на нумпаде.