물리 입자 그룹 다각형
이 문서는 GameMaker에서 물리 입자 그룹의 다각형 형태를 설정하는 방법에 대해 설명합니다. 이 기능을 사용하기 위해서는 먼저 physics_particle_group_begin()
함수를 호출하여 그룹 정의를 시작해야 합니다. 이후 이 함수를 사용하여 다각형 형태를 정의하는 데 사용할 대략적인 점들을 추가할 것임을 GameMaker에 알려줍니다. 이 대략적인 점들은 기본 입자의 크기에 따라 정확한 형태가 달라지며, 이는 physics_particle_set_radius()
함수로 정의됩니다. 물리 시뮬레이션은 가능한 한 많은 입자를 정의된 형태에 맞추려고 합니다.
다각형의 점들을 정의하기 위해서는 physics_particle_group_add_point()
함수를 호출하여 각 점의 x/y 위치를 설정합니다. 최소 3개, 최대 8개의 점을 정의할 수 있으며, 오목한 형태도 가능하지만 형태 내부의 점은 무시됩니다. 마지막으로 physics_particle_group_end()
함수를 호출하여 방 안에 입자 그룹을 생성해야 합니다.
문법
physics_particle_group_polygon()
반환값
- 없음
예제
다음은 입자 유형과 입자 그룹 속성을 변수에 저장한 후, 마우스 위치에서 세 개의 변을 가진 다각형 입자 그룹을 생성하는 코드입니다.
|phy_particle_flag_viscous|
|---|
var groupflags = phy_particle_group_flag_solid;
physics_particle_group_begin(flags, groupflags, mouse_x, mouse_y, 0, 0, 0, 0, c_white, 1, 1, 2);
physics_particle_group_polygon();
physics_particle_group_add_point(200, 200);
physics_particle_group_add_point(300, 300);
physics_particle_group_add_point(100, 300);
mLastGroup = physics_particle_group_end();
활용 예제
- 다각형 입자 그룹 생성
- 사용자가 클릭한 위치에 다각형 입자 그룹을 생성하여 물리 효과를 적용할 수 있습니다.
gml if (mouse_check_button_pressed(mb_left)) { physics_particle_group_begin(flags, groupflags, mouse_x, mouse_y, 0, 0, 0, 0, c_white, 1, 1, 2); physics_particle_group_polygon(); physics_particle_group_add_point(mouse_x, mouse_y); physics_particle_group_add_point(mouse_x + 50, mouse_y + 50); physics_particle_group_add_point(mouse_x - 50, mouse_y + 50); mLastGroup = physics_particle_group_end(); }
- 다양한 형태의 다각형 생성
- 사용자가 입력한 점들을 기반으로 다양한 형태의 다각형을 생성할 수 있습니다.
gml var points = [[100, 100], [150, 200], [50, 200], [100, 150]]; physics_particle_group_begin(flags, groupflags, 200, 200, 0, 0, 0, 0, c_white, 1, 1, 2); physics_particle_group_polygon(); for (var i = 0; i < array_length(points); i++) { physics_particle_group_add_point(points[i][0], points[i][1]); } mLastGroup = physics_particle_group_end();
- 입자 속성 조정
- 다각형 입자 그룹의 속성을 조정하여 다양한 물리적 효과를 실험할 수 있습니다.
gml || || physics_particle_group_begin(flags, groupflags, 300, 300, 0, 0, 0, 0, c_red, 1, 1, 2); physics_particle_group_polygon(); physics_particle_group_add_point(250, 250); physics_particle_group_add_point(350, 250); physics_particle_group_add_point(300, 350); mLastGroup = physics_particle_group_end();