avatar

Простейшая система тряски экрана (при взрывах, землетрясении)

опубликовал в Game Maker
Предлагаю, на мой взгляд лучшее решение для реализации тряски\вибрации игрового окна(экрана):
  1. Создаём объект без спрайта, отмечаем видимость галочкой. Глубину выставляем как можно меньше.
  2. Готовый объект
  3. В Create пишем:
    
    Screen_Shake_Power = random_range(0.4,0.7); //Сила тряски
    

    Либо это, для вращательной тряски:
    Screen_Angle_Shake_Power = random_range(0.1,0.8); //Сила тряски
  4. В 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() //Уничтожаем отработанный объект
        };
    

  5. Далее необходимо включить использование видов в настройках комнаты. Отмечаем, как на скриншоте:
Теперь, когда следует создать тряску, нужно просто вызвать этот объект один раз. В конце тряски он самоликвидируется. В данном коде представлены наиболее оптимальные настройки, хотя вы можете изменить их на своё усмотрение.
Обращайтесь, если что не понятно.

9 комментариев

avatar
Мне кажется, этот код можно было бы сделать универсальнее, если бы:
1) Сила трясения задавалась программно, а не выбиралась бы случайным образом
2) Для тряски использовались синусы/косинусы, а не рандомные значения
avatar
1) Можно задать силу константой, правда тряска будет менее реалистичной, хотя, кому как...
2) Мне кажется, разница не будет слишком заметна. Просто тригонометрия забирает намного больше ресурсов. Лучше её не использовать там, где можно сделать по-другому.
avatar
А видео из игры можно?
avatar
Какой игры? Где используется данный код?
avatar
Именно.
avatar
Видео я к сожалению не занимаюсь, но сделал специально пример для вас:
Для тряски нажмите пробел
avatar
А motion blur стандартными средствами реализовать можно?
avatar
Можно, разными способами. И стандартными в том числе. Если будет ещё время, сделаю урок на эту тему.
avatar
Спасибо!
Чтобы оставить комментарий необходимо .