Создаём красивый взрыв через код
Heksenmaister
опубликовал в
Game Maker
Представляю урок по созданию очень красивого взрыва
Пока это мой самый сложный урок, но результат должен быть впечатляющий.Данный метод подходит для того, чтобы сделать эффектный взрыв 2-D объекта(спрайта) в 2-D игре.
- Для начала создаём объект, который будем взрывать
- В 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);
- Далее в этом объекте создаём событие 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);
- Отступаем пробел и там же пишем код для разлетающихся частей (их можно добавить сколько угодно):
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) };
- После этого там же, в событии Destroy создаём 3 встроенных действия и отмечаем всё как на скриншоте (кликабельны):
- Теперь нужно создать ещё один объект с названием: «Part» без спрайта. Отмечаем видимость галочкой
- В 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);
- В Step пишем:
T -= 1; if (T <= 0) { instance_destroy() //Если время жизни закончится, уничтожить часть };
- В Draw пишем:
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 комментариев
Лучше бы объяснил школьникам всякие
part_type_color3
Так вот, лучше бы объяснил школьникам всякие
part_type_blend
part_type_color3
part_type_direction
То, что кто-то скопирует куски кода, даже не понимая их, и без возможности кастомизации — оче, оче плохо.