====== 만들 수 있는 방법 ====== 튜토리얼에 따르면 - 내장파티클을 조합해서 쓰는 방법 : 쉽지만 밋밋한 효과 - 파티클 액션을 조합해서 쓰는 방법 : 단계가 많다. 괜찮은듯 - 코드를 사용해서 파티클을 만드는 방법 : 좀 더 나이스 - 코드와 이미터를 사용해서 파티클을 만들도 터뜨리는 방법 : 더 더 나이스. 이미터를 사용해서 , * 한번에 터뜨리거나 * 분사형식으로 만들 수 있다. ====== 내장 파티클 : 폭죽 효과 ====== 내장 파티클을 사용해서 폭죽 효과를 만듭니다. - 시작 : 초기 움직임 설정과 알람 0번 1번 추가 - 알람 0번 이벤트 : 불꽃 꼬리 효과 추가 - 알람 1번 이벤트 : 폭죽 효과, 알람 2번 추가 - 알람 2번 이벤트 : 모두 삭제. ===== 1 오브젝트와 초기 설정 ===== 오브젝트를 만들고 **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; ===== 2 연기 꼬리 Effect ===== Alerm[0] 이벤트 추가하고 여기에 액션 추가. - Draw 탭 --> Other 섹션 --> Create Effect 추가. * type : smoke * x : 0 * y : 0 * size : small * color : 회색 * where : below objects * relative : on - Alarm[0] = 1 추가 ===== 3 불꽃 Effect 만들기 ===== 현재 효과를 정지 시키고, 다음 효과 준비를 위해 알람 설정. Alarm[1] 이벤트를 추가하고 다음 액션을 추가 - Draw 탭 --> Other 섹션 --> Create Effect 추가. * type : firework * x : 0 * y : 0 * size : large * color : 노란색 * where : below objects * relative : on - Alarm[0] : -1 - Alarm[2] : room_speed * 3 ===== 4 스스로 삭제 ===== - 알람2번 이벤트 * Instance Destroy 액션 추가 ( main1번 탭의 objects 섹션 ) ====== 파티클 액션으로 만들기 ====== 억.. 이건 정리하려니 답이 안나오네. 그냥 코딩하는게.... ====== 코드로 만들어보기 ====== 만드려는 효과 : 불꽃 효과, 내장 파티클보다는 더 화려하게. ===== 만들 이벤트 ===== 오브젝트를 만들다. 튜토리얼에서는 obj_Simple_Firework로 지었다. * Create Event * Alarm0 * Alarm1 * Alarm2 ==== 0. 파티클의 코딩 순서 ===== - **part_system_create()** 함수로 파티클 시스템을 시작한다. - **part_type_create()** 로 파티클 종류를 설정 준비를 한다. 실제 설정은 다른 함수들을 호출해서 진행한다. 파티클 한개 만드는데 참 많은 속성 설정 함수가 들어간다. - 입자 각각의 모양새 : part_type_shape() - 확대나 축소 범위 : part_type_scale() - 크기 : part_type_size() - 색상의 변화 : part_type_color2() - 투명 상태의 변화 : part_type_alpha2() - 움직이는 속도 : part_type_speed() - 움직이는 방향 : part_type_direction() - 적용되는 중력 : part_type_gravity() - ? : part_type_orientation(); - 색상 혼합 : part_type_blend() - 입자의 수명 : part_type_life() - 파티클을 포함한 오브젝의 초기 상태 설정 - 움직일 방향 - 속도 - 적용되는 초기 중력값. ( 보통 상태로 0.5 ? ) - 중력이 적용되는 방향. 아마 보통 270 (아래쪽) - 파티클을 만들 이벤트를 추가한다. - 알람 또는 기타 이벤트를 추가해서 - **part_particles_create()**를 사용할 수 있는 이벤트를 준비한다. - 오브젝트 종료시 사용한 파티클 삭제 - **part_type_destroy()** : 파티클 타입 삭제. 한개 이상이면 해당 파티클 타입 변수 모두 삭제. - **part_system_destroy()** : 파티클 시스템 종료. 햐 복잡하군. ==== 1. Create Event ===== 다음 코드를 추가. 나도 예제를 따라 간거라 상세 기능은 도움말을 봐야할 것 같다. // 파티클 시스템을 만들고 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; ==== 2. Alarm0 Event ===== // 불꽃 꼬리 효과 파티클을 만들고 part_particles_create( Sname, x, y, trail, 1 ); // 알람 0번을 다시 설정한다. alarm[0] = 1; ==== 3. Alarm1 Event ===== // 알람0번을 끄고, 꼬리 파티클도 끈다. alarm[0] = -1; // 새로운 파티클을 만든다. 펑! 별모양의 파티클이 펑하고 터진다. part_particles_create( Sname, x, y, stars, 200 ); // 알람 2번을 설정한다. alarm[2] = 1; ==== 4. Alarm2 Event ===== // 한 스텝 간격으로 모든 파티클이 사라졌는지 확인한다. // 갑자기 슥 모든 불꽃이 사라지면 어색하므로 if part_particles_count(Sname) > 0 { alarm[2] = 1; } else { // 모든 파티클이 사라졌다. // 사용한 파티클을 모두 삭제한다. 삭제하지 않는 파티클은 메모리 누수 원인이 된다고 한다. part_type_destroy(trail); part_type_destroy(stars); part_system_destroy(Sname); } ====== 코드+방사체(이미터,emitter)로 만들어보기 ====== 이미터를 사용해서 특정 위치에서 폭발하거나 분사 되도록 설정한다. 파티클이 퍼져 나가는 방식을 결정한다. 윗부분 섹션과 다른 부분만 추가. ===== 터지는 파티클 효과 ===== - 파티클 시스템을 만들고 Sname = part_system_create(); - 파티클 타입을 만들고. \\ 변수 (인스턴스) 이름이 **explode** 라고 가정. 설정 코드는 제외하고 패스. - **이미터를 만든다.** 함수 파라미터는 파티클 시스템의 변수. 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 이상이면 숫자만큼 계속 내보낸다. ====== 파티클 코드 생성기 ====== 게임메이커 개발자들이 추가로 만든 유틸리티. 이걸로 파티클을 직접 만들면서 확인해 보고 코드를 추가하는게 낫다. (오 살았다) * [[http://gmc.yoyogames.com/index.php?showtopic=290449|Particle Designer 2.5]] * [[http://gmc.yoyogames.com/index.php?showtopic=539511|Sparks]] ====== 튜토리얼 번역 ====== * 아직 진행중 , 70~80% * {{:language:gamemaker:20121114-particle-tutorial-working.7z|}}