물리 피xture 바인딩 (physics_fixture_bind_ext)
물리 피xture를 정의한 후, 이를 인스턴스에 바인딩해야 합니다. 이는 피xture의 속성이 선택된 인스턴스로 전송된다는 것을 의미하며, 실제 피xture 자체가 아닌 인스턴스에 적용됩니다. 따라서 하나의 피xture는 여러 인스턴스에 바인딩될 수 있으며, 이 경우 모든 인스턴스는 동일한 속성을 가집니다.
바인딩 방법
- 대상 인스턴스 지정: 객체 인덱스를 지정하면, 해당 방에 있는 모든 인스턴스가 피xture의 속성을 받습니다. 단, 나중에 생성된 인스턴스는 제외됩니다.
- 특수 키워드 사용:
other
와all
키워드를 사용할 수 있습니다. - 부모 객체 지정: 부모 객체를 지정하면, 해당 부모의 모든 자식 인스턴스도 피xture를 받습니다.
피xture가 필요한 모든 인스턴스에 바인딩된 후에는 더 이상 필요하지 않으면 삭제할 수 있습니다. 이 경우 인스턴스는 여전히 피xture의 속성을 유지합니다.
바인딩 위치 조정
일반적으로 피xture는 인스턴스의 질량 중심이 인스턴스의 원점에 위치하도록 바인딩됩니다. 그러나 필요에 따라 x 및 y 위치를 오프셋할 수 있습니다. 여러 오프셋을 추가하는 것은 지원되지 않으므로, 단일 오프셋만 가능합니다.
고유 ID 반환
이 함수는 바인딩된 피xture에 대한 고유한 "id" 값을 반환합니다. 이 값은 physics_remove_fixture
함수를 사용하여 인스턴스에서 물리적 속성을 제거하는 데 사용될 수 있습니다. 이를 통해 객체를 파괴하고 재생성하지 않고도 인스턴스에서 물리적 속성을 추가하거나 제거할 수 있습니다.
메모리 관리
피xture가 더 이상 필요하지 않을 때 삭제해야 합니다. 삭제하지 않으면 메모리 누수가 발생하여 게임이 느려지거나 결국 충돌할 수 있습니다.
문법
physics_fixture_bind_ext(fixture, target, xoffset, yoffset)
인수 설명
인수 | 유형 | 설명 |
---|---|---|
fixture | Physics Fixture ID | 바인딩할 피xture |
target | Object Instance/Object Asset | 피xture를 받을 대상 인스턴스 (인스턴스 ID, 객체 ID, other, all 가능) |
xoffset | Real | x축을 따라 오프셋 |
yoffset | Real | y축을 따라 오프셋 |
반환 값
- Real
활용 예제
예제 1: 피xture 생성 및 바인딩
var fix, inst;
fix = physics_fixture_create();
physics_fixture_set_circle_shape(fix, 16);
physics_fixture_set_density(fix, 1.0);
inst = instance_create_layer(x, y, "Instances", genericBodyObject);
my_fix = physics_fixture_bind_ext(fix, inst, sprite_width / 2, -(sprite_height / 2));
physics_fixture_delete(fix);
위 코드는 피xture를 생성하고 "fix" 변수에 인덱스를 할당합니다. 그 후 피xture의 형태와 밀도를 정의하고, 인스턴스에 스프라이트의 너비와 높이에 기반한 오프셋으로 바인딩합니다. 바인딩된 피xture의 인덱스는 "my_fix" 변수에 저장됩니다. 마지막으로, 더 이상 필요하지 않으므로 피xture를 삭제하여 메모리 누수를 방지합니다.
예제 2: 부모 객체를 통한 바인딩
var parentInst, childInst;
parentInst = instance_create_layer(x, y, "Instances", parentObject);
childInst = instance_create_layer(x + 50, y, "Instances", childObject);
my_fix = physics_fixture_bind_ext(fix, parentInst, 0, 0);
이 코드는 부모 객체에 피xture를 바인딩하여 모든 자식 인스턴스가 해당 피xture의 속성을 받도록 합니다.
예제 3: 오프셋을 사용한 바인딩
var inst;
inst = instance_create_layer(x, y, "Instances", anotherObject);
my_fix = physics_fixture_bind_ext(fix, inst, 10, -5);
위 코드는 인스턴스에 피xture를 바인딩할 때 x축으로 10, y축으로 -5의 오프셋을 적용합니다.