인스턴스 변경(instance_change) 함수 설명
instance_change
함수는 하나의 객체 인스턴스를 다른 객체 인스턴스로 변경할 수 있게 해줍니다. 이때, 기존 인스턴스의 파괴(Destroy) 및 정리(Clean Up) 이벤트와 새로운 인스턴스의 생성(Create) 이벤트를 수행할지 선택할 수 있습니다.
예를 들어, 폭탄이 폭발로 변할 때 perf
인자는 true
로 설정하여 폭탄의 파괴 이벤트와 정리 이벤트를 수행하고, 동시에 폭발의 생성 이벤트를 수행하도록 할 수 있습니다. 반면, 플레이어 캐릭터가 다른 캐릭터로 바뀌는 경우에는 perf
인자를 false
로 설정하여 생성 및 파괴 이벤트가 수행되지 않도록 할 수 있습니다. 이렇게 하면 기존 인스턴스의 속성을 그대로 유지할 수 있습니다.
주의사항
인스턴스를 변경한 후, 그 인스턴스에 대한 추가 작업을 하는 것은 다음 단계까지 지양해야 합니다. 특히 변수를 접근하려고 하면 오류가 발생합니다. 변경된 인스턴스는 현재 단계의 끝까지 사용할 수 없으므로, 직접 변수에 접근하는 것 (예: obj_Changed.x
)은 작동하지 않습니다.
물리 속성이 활성화된 인스턴스를 변경할 때는, 기존 인스턴스의 물리 상태가 새로운 인스턴스로 전달되지 않습니다. 따라서 현재 인스턴스의 물리 상태를 새로운 인스턴스로 "전이"하는 코드나, 새로운 인스턴스의 물리 속성을 생성 이벤트나 객체 편집기에서 정의하는 코드가 필요합니다. 이러한 이유로, 물리 인스턴스와 함께 이 함수를 사용하는 것은 추천되지 않으며, 대신 instance_destroy()
와 instance_create_layer()
함수의 조합을 사용하는 것이 바람직합니다.
문법
instance_change(obj, perf);
인자 설명
인자 | 유형 | 설명 |
---|---|---|
obj | Object Asset | 호출하는 객체가 변경될 새로운 객체 |
perf | Boolean | 생성 및 파괴 이벤트를 수행할지 여부 (true) 또는 수행하지 않을지 여부 (false) |
반환 값
없음
예제
if (keyboard_check(vk_enter)){
instance_change(obj_Player_Swimming, false);
exit;
}
위 코드는 사용자에 의해 "Enter" 키가 눌리면 호출 인스턴스를 "obj_Player_Swimming" 인스턴스로 변경합니다. 이때 원래 인스턴스의 파괴 이벤트와 새로운 인스턴스의 생성 이벤트가 수행되지 않으며, 코드 블록을 종료합니다.
활용 및 응용 예제
1. 폭탄이 폭발로 변화
폭탄 인스턴스가 일정 시간 후 폭발 인스턴스로 변경됩니다.
if (alarm[0] == 0) {
instance_change(obj_Explosion, true);
}
2. 플레이어 캐릭터의 스킨 변경
플레이어가 캐릭터의 스킨을 변경하며, 이벤트를 유지하도록 합니다.
if (keyboard_check_pressed(vk_s)) {
instance_change(obj_Player_Skin2, false);
}
3. 적의 상태 변화
적이 사망할 때 표식으로 상태(예: '죽음' 상태)로 변경합니다.
if (health <= 0) {
instance_change(obj_Enemy_Dead, true);
}
이와 같은 다양한 상황에서 instance_change
함수를 활용하여 게임의 다채로운 상호작용을 구현할 수 있습니다.