소프트 바디 입자
GameMaker는 Box2D 강체 물리 라이브러리를 사용하므로 소프트 바디 물리를 지원하지 않습니다. 그러나 Liquid Fun 확장을 통해 입자를 물리 시스템에 추가하여 강체 물리를 사용하여 시뮬레이션된 소프트 바디를 생성할 수 있습니다. 기본적으로 입자의 형태를 만들어 응집력을 유지하고 전체 몸체를 시뮬레이션할 수 있으며, 입자 간의 상호작용으로 인해 소프트 바디의 인상을 줍니다. 또한 물리 입자를 사용하여 액체 및 기타 입자 기반 물리 시스템을 시뮬레이션할 수 있습니다.
기본 물리 속성 설정
물리 입자를 생성하기 전에 기본 물리 속성을 설정해야 합니다. 이는 일반 물리에서의 고정 장치와 유사합니다. 그러나 이러한 속성을 설정하면 이전에 생성된 모든 입자와 새로 생성하는 입자에 영향을 미치므로, 일반적으로 게임이나 레벨 시작 시에만 이러한 함수를 사용합니다. 개별 입자(또는 입자 그룹)의 속성을 변경할 수 있는 특정 함수도 제공되며, 이를 통해 "탄성"이나 "점도"와 같은 속성을 설정하여 다양한 유형의 입자를 생성할 수 있습니다.
전역 입자 시스템 데이터 설정 및 가져오기 함수
함수 이름 | 설명 |
---|---|
physics_particle_count | 현재 입자 수를 반환합니다. |
physics_particle_group_count | 현재 입자 그룹 수를 반환합니다. |
physics_particle_set_max_count | 최대 입자 수를 설정합니다. |
physics_particle_set_radius | 입자 반경을 설정합니다. |
physics_particle_set_density | 입자 밀도를 설정합니다. |
physics_particle_set_damping | 입자 감쇠를 설정합니다. |
physics_particle_set_gravity_scale | 중력 비율을 설정합니다. |
physics_particle_get_max_count | 최대 입자 수를 가져옵니다. |
physics_particle_get_radius | 입자 반경을 가져옵니다. |
physics_particle_get_density | 입자 밀도를 가져옵니다. |
physics_particle_get_damping | 입자 감쇠를 가져옵니다. |
physics_particle_get_gravity_scale | 중력 비율을 가져옵니다. |
개별 입자 플래그 설정 및 정보 가져오기 함수
함수 이름 | 설명 |
---|---|
physics_particle_set_flags | 개별 입자의 플래그를 설정합니다. |
physics_particle_set_category_flags | 카테고리 플래그를 설정합니다. |
physics_particle_set_group_flags | 그룹 플래그를 설정합니다. |
physics_particle_get_group_flags | 그룹 플래그를 가져옵니다. |
physics_particle_group_get_inertia | 그룹의 관성 값을 가져옵니다. |
physics_particle_group_get_mass | 그룹의 질량을 가져옵니다. |
physics_particle_group_get_centre_x | 그룹의 중심 X 좌표를 가져옵니다. |
physics_particle_group_get_centre_y | 그룹의 중심 Y 좌표를 가져옵니다. |
physics_particle_group_get_vel_x | 그룹의 X 속도를 가져옵니다. |
physics_particle_group_get_vel_y | 그룹의 Y 속도를 가져옵니다. |
physics_particle_group_get_ang_vel | 그룹의 각속도를 가져옵니다. |
physics_particle_group_get_x | 그룹의 X 좌표를 가져옵니다. |
physics_particle_group_get_y | 그룹의 Y 좌표를 가져옵니다. |
physics_particle_group_get_angle | 그룹의 각도를 가져옵니다. |
physics_particle_get_data | 입자의 데이터를 가져옵니다. |
physics_particle_get_data_particle | 특정 입자의 데이터를 가져옵니다. |
physics_particle_group_get_data | 그룹의 데이터를 가져옵니다. |
입자 생성 방법
입자는 개별적으로 또는 그룹으로 생성할 수 있습니다. 개별 입자는 전역 설정과 생성 시 설정된 플래그에 따라 정확하게 동작하지만, 입자 그룹은 그룹 플래그에 따라 다른 동작을 보일 수 있습니다. 그룹 플래그는 서로 다른 값을 설정하여 그룹에 침투 및 강직성과 같은 다양한 속성을 부여할 수 있습니다.
입자 생성 함수
함수 이름 | 설명 |
---|---|
physics_particle_create | 개별 입자를 생성합니다. |
physics_particle_group_begin | 입자 그룹 생성을 시작합니다. |
physics_particle_group_circle | 원형 그룹 입자를 생성합니다. |
physics_particle_group_box | 사각형 그룹 입자를 생성합니다. |
physics_particle_group_polygon | 다각형 그룹 입자를 생성합니다. |
physics_particle_group_add_point | 그룹에 점을 추가합니다. |
physics_particle_group_end | 입자 그룹 생성을 종료합니다. |
physics_particle_group_join | 두 그룹을 결합합니다. |
physics_particle_group_delete | 그룹을 삭제합니다. |
입자 삭제 방법
입자는 개별적으로 또는 특정 영역에서 삭제할 수 있습니다. 다음은 시스템에서 입자를 삭제하는 함수입니다.
함수 이름 | 설명 |
---|---|
physics_particle_delete | 개별 입자를 삭제합니다. |
physics_particle_delete_region_circle | 원형 영역에서 입자를 삭제합니다. |
physics_particle_delete_region_box | 사각형 영역에서 입자를 삭제합니다. |
physics_particle_delete_region_poly | 다각형 영역에서 입자를 삭제합니다. |
입자 시각화
입자를 생성하더라도 physics_draw_debug()
를 사용하여 디버그 드로잉을 활성화하지 않으면 화면에 입자가 보이지 않습니다. 따라서 입자를 실제로 보려면 인스턴스의 Draw Event에서 다음 함수를 사용하여 화면에 그려야 합니다. (각 입자의 데이터를 physics_particle_get_data()
함수를 사용하여 가져오면 일반 draw_sprite
함수로도 그릴 수 있습니다.)
입자 그리기 함수
함수 이름 | 설명 |
---|---|
physics_particle_draw | 입자를 화면에 그립니다. |
physics_particle_draw_ext | 입자를 확장하여 그립니다. |
활용 예제
예제 1: 기본 입자 생성
// 기본 입자 생성
physics_particle_set_radius(5);
physics_particle_set_density(1);
var particle = physics_particle_create();
예제 2: 입자 그룹 생성
// 입자 그룹 생성
physics_particle_group_begin();
physics_particle_group_circle(0, 0, 10);
physics_particle_group_end();
예제 3: 입자 삭제
// 개별 입자 삭제
physics_particle_delete(particle);
예제 4: 입자 속성 설정
// 입자 속성 설정
physics_particle_set_flags(particle, physics_particle_flag_bouncy);
예제 5: 입자 시각화
// 입자 시각화
physics_particle_draw();