====== 만들 수 있는 방법 ======
튜토리얼에 따르면
- 내장파티클을 조합해서 쓰는 방법 : 쉽지만 밋밋한 효과
- 파티클 액션을 조합해서 쓰는 방법 : 단계가 많다. 괜찮은듯
- 코드를 사용해서 파티클을 만드는 방법 : 좀 더 나이스
- 코드와 이미터를 사용해서 파티클을 만들도 터뜨리는 방법 : 더 더 나이스. 이미터를 사용해서 ,
* 한번에 터뜨리거나
* 분사형식으로 만들 수 있다.
====== 내장 파티클 : 폭죽 효과 ======
내장 파티클을 사용해서 폭죽 효과를 만듭니다.
- 시작 : 초기 움직임 설정과 알람 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|}}