튜토리얼에 따르면
내장 파티클을 사용해서 폭죽 효과를 만듭니다.
오브젝트를 만들고 Create Event에 위치와 움직임을 적절히 설정
direction = point_direction( x, y, room_width/2, 100); speed = 15 + random(5); gravity = 0.5; gravity_direction = 270; // 알람 2개를 설정했다. alarm[0] = 1; alarm[1] = room_speed;
Alerm[0] 이벤트 추가하고 여기에 액션 추가.
현재 효과를 정지 시키고, 다음 효과 준비를 위해 알람 설정.
Alarm[1] 이벤트를 추가하고 다음 액션을 추가
억.. 이건 정리하려니 답이 안나오네. 그냥 코딩하는게….
만드려는 효과 : 불꽃 효과, 내장 파티클보다는 더 화려하게.
오브젝트를 만들다. 튜토리얼에서는 obj_Simple_Firework로 지었다.
햐 복잡하군.
다음 코드를 추가. 나도 예제를 따라 간거라 상세 기능은 도움말을 봐야할 것 같다.
// 파티클 시스템을 만들고 Sname = part_system_create(); // 불꽃 꼬리의 파티클 타입 준비 trail = part_type_create(); // 파티클의 모양을 선택, 스파크랍니다. part_type_shape( trail, pt_shape_spark ); // 파티클의 확대 비율 상태, 아래는 1:1(원본) part_type_scale( trail, 1, 1 ); // 파티클의 최소, 최대 크기. part_type_size( trail, 0.20, 0.50, 0, 0 ); part_type_color2( trail, c_white, c_gray ); part_type_alpha2( trail, 1, 0 ); part_type_speed( trail, 2, 5, -0.20, 0 ); part_type_direction( trail, 0, 359, 0, 0 ); part_type_gravity( trail, 0.5, 270 ); // 파티클의 회전 가능 범위. 이미지(여기에서는 오브젝트의 진행 방향)의 회전 각도와 같아야 하므로 360도 회전 가능하게 설정. part_type_orientation( trail, 0, 359, 0, 0, 0 ); part_type_blend( trail, 0 ); part_type_life( trail, 8, 30 ); stars = part_type_create(); part_type_shape( stars, pt_shape_star ); part_type_size( stars, 0.5, 1, -0.02, 0 ); part_type_scale( stars, 1, 1 ); part_type_color3( stars, c_lime, c_fuchsia, c_blue ); part_type_alpha3( stars, 0, 1, 0 ); part_type_speed( stars, 2, 4, 0, 0 ); part_type_direction( stars, 0, 359, 0, 0 ); part_type_gravity( stars, 0.20, 270 ); part_type_orientation( stars, 0, 359, 0, 0, 0 ); part_type_blend( stars, 1 ); part_type_life( stars, 50, 70 ); direction = point_direction( x, y, room_width / 2, 100 ); speed = 15 + random( 5 ); gravity = 0.5; gravity_direction = 270; alarm[0] = 1; alarm[1] = room_speed;
// 불꽃 꼬리 효과 파티클을 만들고 part_particles_create( Sname, x, y, trail, 1 ); // 알람 0번을 다시 설정한다. alarm[0] = 1;
// 알람0번을 끄고, 꼬리 파티클도 끈다. alarm[0] = -1; // 새로운 파티클을 만든다. 펑! 별모양의 파티클이 펑하고 터진다. part_particles_create( Sname, x, y, stars, 200 ); // 알람 2번을 설정한다. alarm[2] = 1;
// 한 스텝 간격으로 모든 파티클이 사라졌는지 확인한다. // 갑자기 슥 모든 불꽃이 사라지면 어색하므로 if part_particles_count(Sname) > 0 { alarm[2] = 1; } else { // 모든 파티클이 사라졌다. // 사용한 파티클을 모두 삭제한다. 삭제하지 않는 파티클은 메모리 누수 원인이 된다고 한다. part_type_destroy(trail); part_type_destroy(stars); part_system_destroy(Sname); }
이미터를 사용해서 특정 위치에서 폭발하거나 분사 되도록 설정한다. 파티클이 퍼져 나가는 방식을 결정한다.
윗부분 섹션과 다른 부분만 추가.
Sname = part_system_create();
emitter1 = part_emitter_create( Sname );
var posx, posy; posx = choose( 194, 305, 520 ); if posx == 194 posy = 264 else if posx == 305 posy = 235 else posy = 292; // 이미터 사용 1번 순서 part_emitter_region( Sname, emitter1, posx - 64, posx + 64, posy - 32, posy + 32, ps_shape_ellipse, ps_distr_gaussian ); // 이미터 사용 2번 순서, 펑 터진다. part_emitter_burst( Sname, emitter1, explode, 100 );
윗 섹셕과 다른 부분만 추가.
분사 효과를 사용할 때는 part_emitter_burst() 대신 part_emitter_stream() 함수를 사용한다. 분사 효과는 계속 반복된다.
이벤트 발생시 아래 함수로 파티클을 내보낸다.
part_emitter_stream( <파티클 시스템 인스턴스 변수>, <이미터 인스턴스 변수>, <파티클 타입 인스턴스 변수>, <숫자, 내보낼 파티클 입자의 개수> ); // 0이면 멈추고, 0 이상이면 숫자만큼 계속 내보낸다.
게임메이커 개발자들이 추가로 만든 유틸리티. 이걸로 파티클을 직접 만들면서 확인해 보고 코드를 추가하는게 낫다. (오 살았다)