language:gamemaker:2-파티클
목차
만들 수 있는 방법
튜토리얼에 따르면
- 내장파티클을 조합해서 쓰는 방법 : 쉽지만 밋밋한 효과
- 파티클 액션을 조합해서 쓰는 방법 : 단계가 많다. 괜찮은듯
- 코드를 사용해서 파티클을 만드는 방법 : 좀 더 나이스
- 코드와 이미터를 사용해서 파티클을 만들도 터뜨리는 방법 : 더 더 나이스. 이미터를 사용해서 ,
- 한번에 터뜨리거나
- 분사형식으로 만들 수 있다.
내장 파티클 : 폭죽 효과
내장 파티클을 사용해서 폭죽 효과를 만듭니다.
- 시작 : 초기 움직임 설정과 알람 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 이상이면 숫자만큼 계속 내보낸다.
파티클 코드 생성기
게임메이커 개발자들이 추가로 만든 유틸리티. 이걸로 파티클을 직접 만들면서 확인해 보고 코드를 추가하는게 낫다. (오 살았다)
튜토리얼 번역
- 아직 진행중 , 70~80%
language/gamemaker/2-파티클.txt · 마지막으로 수정됨: 2024/04/23 22:44 저자 127.0.0.1