avatar

Создаём красивый взрыв через код

опубликовал в Game Maker
Представляю урок по созданию очень красивого взрыва
Пока это мой самый сложный урок, но результат должен быть впечатляющий.
Данный метод подходит для того, чтобы сделать эффектный взрыв 2-D объекта(спрайта) в 2-D игре.
  1. Для начала создаём объект, который будем взрывать
  2. В Create этого объекта пишем следующее:
    System_Actor_Destroy = part_system_create();
    part_system_depth(System_Actor_Destroy,1);
    Particle_Actor_Destroy = part_type_create();
    part_type_shape(Particle_Actor_Destroy,pt_shape_ring);
    part_type_size(Particle_Actor_Destroy,1,1,0.20,0);
    part_type_scale(Particle_Actor_Destroy,1,1);
    part_type_orientation(Particle_Actor_Destroy,0,0,0,0,0);
    part_type_color3(Particle_Actor_Destroy,16777215,12615680,0);
    part_type_alpha3(Particle_Actor_Destroy,0.03,0.03,0.03);
    part_type_blend(Particle_Actor_Destroy,0.5);
    part_type_life(Particle_Actor_Destroy,230,250);
    part_type_speed(Particle_Actor_Destroy,0,0,0,0);
    part_type_direction(Particle_Actor_Destroy,0,359,0,0);
    part_type_gravity(Particle_Actor_Destroy,0,0);
    Emitter_Actor_Destroy = part_emitter_create(System_Actor_Destroy);
    
  3. Далее в этом объекте создаём событие Destroy. В нём пишем:
    part_emitter_region(System_Actor_Destroy, Emitter_Actor_Destroy,x,x,y,y,ps_shape_rectangle,0);
    part_emitter_burst(System_Actor_Destroy, Emitter_Actor_Destroy, Particle_Actor_Destroy,2);
    
  4. Отступаем пробел и там же пишем код для разлетающихся частей (их можно добавить сколько угодно):
    Part_1 = instance_create(x,y, Part);
    with Part_1
        {
        direction = irandom_range(0,40)
        };
    
    Part_2 = instance_create(x,y, Part);
    with Part_2
        {
        direction = irandom_range(40,80)
        };
    
    Part_3 = instance_create(x,y, Part);
    with Part_3
        {
        direction = irandom_range(80,120)
        };
    
    Part_4 = instance_create(x,y, Part);
    with Part_4
        {
        direction = irandom_range(120,160)
        };
    
    Part_5 = instance_create(x,y, Part);
    with Part_5
        {
        direction = irandom_range(160,200)
        };
    
    Part_6 = instance_create(x,y, Part);
    with Part_6
        {
        direction = irandom_range(200,240)
        };
    
    Part_7 = instance_create(x,y, Part);
    with Part_7
        {
        direction = irandom_range(240,280)
        };
    
    Part_8 = instance_create(x,y, Part);
    with Part_8
        {
        direction = irandom_range(280,320)
        };
    
    Part_9 = instance_create(x,y, Part);
    with Part_9
        {
        direction = irandom_range(320,359)
        };
    
  5. После этого там же, в событии Destroy создаём 3 встроенных действия и отмечаем всё как на скриншоте (кликабельны):
  6. Теперь нужно создать ещё один объект с названием: «Part» без спрайта. Отмечаем видимость галочкой


  7. В Create пишем:
    speed = irandom_range(2,12); //Скорости разлетающихся частей
    T = irandom_range(60,90); //Время жизни разлетающихся частей
    
    System_Tail = part_system_create();
    part_system_depth(System_Tail,1);
    Particle_Tail = part_type_create();
    part_type_shape(Particle_Tail,pt_shape_smoke);
    part_type_size(Particle_Tail,0.6,0.6,0,0.3);
    part_type_scale(Particle_Tail,0.50,0.50);
    part_type_orientation(Particle_Tail,45,0,0,0,0);
    part_type_color3(Particle_Tail,8421504,16777215,12632256);
    part_type_alpha3(Particle_Tail,0.2,0.2,0.2);
    part_type_blend(Particle_Tail,0.5);
    part_type_life(Particle_Tail,1,20);
    part_type_speed(Particle_Tail,1,0,0,0);
    part_type_direction(Particle_Tail,0,359,0,0);
    part_type_gravity(Particle_Tail,0,0);
    Emitter_Tail = part_emitter_create(System_Tail);
    
    System_Eff = part_system_create();
    part_system_depth(System_Eff,1);
    Particle_Eff = part_type_create();
    part_type_shape(Particle_Eff,pt_shape_explosion);
    part_type_size(Particle_Eff,0.20,0.20,0,0);
    part_type_scale(Particle_Eff,1,1);
    part_type_orientation(Particle_Eff,45,0,0,0,0);
    part_type_color3(Particle_Eff,16711680,65535,255);
    part_type_alpha3(Particle_Eff,1,1,1);
    part_type_blend(Particle_Eff,1);
    part_type_life(Particle_Eff,3,5);
    part_type_speed(Particle_Eff,0,0,0,0);
    part_type_direction(Particle_Eff,0,170,0,0);
    part_type_gravity(Particle_Eff,0,0);
    Emitter_Eff = part_emitter_create(System_Eff);
    
  8. В Step пишем:
    T -= 1;
    if (T <= 0)
        {
        instance_destroy() //Если время жизни закончится, уничтожить часть
        };
    

  9. В Draw пишем:
  10. part_emitter_region(System_Tail, Emitter_Tail,x,x,y,y,ps_shape_rectangle,ps_distr_linear);
    part_emitter_burst(System_Tail, Emitter_Tail, Particle_Tail,3);
    
    part_emitter_region(System_Eff, Emitter_Eff,x-4,x+4,y-4,y+4,ps_shape_rectangle,ps_distr_linear);
    part_emitter_burst(System_Eff, Emitter_Eff, Particle_Eff,3);
    

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

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

avatar
А эти уроки только для Game Maker 8, или они актуальны и для Game Maker Studio?
avatar
Не одобряю такие туториалы.
Лучше бы объяснил школьникам всякие
part_type_color3
avatar
Случайно отправил.
Так вот, лучше бы объяснил школьникам всякие
part_type_blend
part_type_color3
part_type_direction
То, что кто-то скопирует куски кода, даже не понимая их, и без возможности кастомизации — оче, оче плохо.
avatar
Ну будет 1000 одинаковых взрывов. ведь всегда видно кто делает без кастомизации копипастой а кто делает разобравшись в коде.
avatar
Такие основы очень хорошо прописаны в официальной справке.
Чтобы оставить комментарий необходимо .