로프 조인트 생성 (physics_joint_rope_create)
로프 조인트는 두 개의 인스턴스를 연결하여 서로 일정한 거리를 유지하도록 하는 기능입니다. 이 조인트는 다른 힘이 작용하더라도 두 인스턴스 간의 거리를 유지합니다. 반면, 거리 조인트는 너무 많은 스트레스가 가해지면 조인트가 늘어나고 비정상적으로 동작할 수 있습니다. 그러나 로프 조인트는 최대 정의된 길이 이상으로 늘어나지 않습니다.
사용 방법
로프 조인트를 생성하기 위해서는 두 개의 인스턴스가 이미 생성되어 있어야 하며, 각각의 인스턴스에 피처가 할당되어 있어야 합니다. 이후 방 좌표에서 두 개의 앵커 포인트를 정의합니다. 첫 번째 앵커 포인트는 인스턴스 1에 연결되고, 두 번째 앵커 포인트는 인스턴스 2에 연결됩니다. maxlength
인자는 조인트의 최대 길이를 설정합니다.
앵커 포인트 정의
- 앵커 포인트는 방 좌표로 지정되므로, 정의할 때 주의해야 합니다. 특히 인스턴스와 조인트가 동시에 생성될 경우 더욱 신경 써야 합니다.
- 조인트는 인스턴스의 스프라이트 크기나 연결된 피처의 크기와는 독립적으로 생성됩니다. 따라서 인스턴스의 원점이 아닌 다른 위치에 로프 조인트를 생성해도 유효합니다.
충돌 설정
col
값을 true
로 설정하면 두 인스턴스가 서로 상호작용하고 충돌할 수 있습니다. 그러나 충돌 이벤트가 있어야만 충돌이 발생합니다. false
로 설정하면 어떤 경우에도 충돌하지 않습니다.
문법
physics_joint_rope_create(inst1, inst2, w_anchor1_x, w_anchor1_y, w_anchor2_x, w_anchor2_y, maxlength, col)
인자 설명
인자 이름 | 타입 | 설명 |
---|---|---|
inst1 | Instance ID | 조인트에 연결할 첫 번째 인스턴스 |
inst2 | Instance ID | 조인트에 연결할 두 번째 인스턴스 |
w_anchor1_x | Real | 조인트의 첫 번째 x 좌표 |
w_anchor1_y | Real | 조인트의 첫 번째 y 좌표 |
w_anchor2_x | Real | 조인트의 두 번째 x 좌표 |
w_anchor2_y | Real | 조인트의 두 번째 y 좌표 |
maxlength | Real | 조인트가 늘어날 수 있는 최대 길이 |
col | Boolean | 두 인스턴스가 충돌할 수 있는지 여부 |
반환 값
- Physics Joint ID
활용 예제
예제 1: 기본 로프 조인트 생성
var mainFixture, o_id;
mainFixture = physics_fixture_create();
physics_fixture_set_circle_shape(mainFixture, sprite_get_width(sprite_index) / 2);
o_id = instance_create_layer(x + 300, y, "Instances", obj_Rudder);
physics_fixture_bind(mainFixture, id);
physics_fixture_bind(mainFixture, o_id);
physics_joint_rope_create(id, o_id, x + 50, y, o_id.x - 50, o_id.y, 300, 0);
physics_fixture_delete(mainFixture);
예제 2: 충돌이 가능한 로프 조인트 생성
var mainFixture, o_id;
mainFixture = physics_fixture_create();
physics_fixture_set_circle_shape(mainFixture, sprite_get_width(sprite_index) / 2);
o_id = instance_create_layer(x + 300, y, "Instances", obj_Rudder);
physics_fixture_bind(mainFixture, id);
physics_fixture_bind(mainFixture, o_id);
physics_joint_rope_create(id, o_id, x + 50, y, o_id.x - 50, o_id.y, 300, 1);
physics_fixture_delete(mainFixture);
예제 3: 조인트의 최대 길이 조정
var mainFixture, o_id;
mainFixture = physics_fixture_create();
physics_fixture_set_circle_shape(mainFixture, sprite_get_width(sprite_index) / 2);
o_id = instance_create_layer(x + 300, y, "Instances", obj_Rudder);
physics_fixture_bind(mainFixture, id);
physics_fixture_bind(mainFixture, o_id);
physics_joint_rope_create(id, o_id, x + 50, y, o_id.x - 50, o_id.y, 500, 0);
physics_fixture_delete(mainFixture);