
Простейшая система тряски экрана (при взрывах, землетрясении)
Heksenmaister
опубликовал в
Game Maker
Предлагаю, на мой взгляд лучшее решение для реализации тряски\вибрации игрового окна(экрана):
- Создаём объект без спрайта, отмечаем видимость галочкой. Глубину выставляем как можно меньше.
- В Create пишем:
Screen_Shake_Power = random_range(0.4,0.7); //Сила тряски
Либо это, для вращательной тряски:
Screen_Angle_Shake_Power = random_range(0.1,0.8); //Сила тряски
- В Draw пишем:
Screen_Shake_Power -= 0.01; //Постепенное затухание тряски view_xview[0] = Screen_Shake_Power + random_range(-1.8,1.8); //Горизонтальная тряска view_yview[0] = Screen_Shake_Power + random_range(-1.8,1.8); //Вертикальная тряска if (Screen_Shake_Power <= 0) //Если тряска прекратится { view_xview[0] = 0; //Фиксируем экран в изначальном положении по горизонтали view_yview[0] = 0; //Фиксируем экран в изначальном положении по вертикали instance_destroy() //Уничтожаем отработанный объект };
Либо это, для вращательной тряски:
Screen_Angle_Shake_Power -= 0.01; //Постепенное затухание тряски view_angle[0] = random_range(-Screen_Angle_Shake_Power * 1.2, Screen_Angle_Shake_Power * 1.2); //Создаём колебания if (Screen_Angle_Shake_Power <= 0) //Если тряска прекратится { view_angle = 0; //Фиксируем экран в изначальном положении instance_destroy() //Уничтожаем отработанный объект };
- Далее необходимо включить использование видов в настройках комнаты. Отмечаем, как на скриншоте:


Обращайтесь, если что не понятно.
9 комментариев
1) Сила трясения задавалась программно, а не выбиралась бы случайным образом
2) Для тряски использовались синусы/косинусы, а не рандомные значения
2) Мне кажется, разница не будет слишком заметна. Просто тригонометрия забирает намного больше ресурсов. Лучше её не использовать там, где можно сделать по-другому.
Для тряски нажмите пробел