충돌 호환성 모드
개요
프로젝트의 일반 게임 옵션에서 "충돌 호환성 모드"를 활성화하면 이전 충돌 시스템으로 전환할 수 있습니다. 이 모드는 GameMaker 2022.1 또는 그 이후 버전으로 업그레이드한 후 기존 프로젝트에서 충돌 관련 이상 행동을 발견한 경우에만 필요합니다.
충돌의 변화
이전 충돌 시스템에서는 모든 경계 상자 좌표가 정수로 반올림되었으며 "배타적"이었습니다. 즉, 충돌 마스크의 가장 아래쪽 및 오른쪽 가장자리는 제외되었습니다. 예를 들어, 16x16 충돌 마스크의 경계 상자는 (0, 0)에서 (15, 15)까지 생성되었습니다. 이는 위치와 크기를 정수 값만 사용하는 인스턴스에는 잘 작동했지만, 부동 소수점 값을 사용할 경우 예기치 않은 행동을 초래하고 렌더링과 충돌 체크 간의 약간의 불일치를 발생시켰습니다. GameMaker는 충돌 체크를 수행하기 위해 항상 경계 상자 값을 반올림했습니다.
현재 충돌 시스템에서는 경계 상자 값이 반올림되지 않고 그대로 사용되므로 충돌이 더 정확하고 예상대로 동작합니다. 경계 상자도 이제 "포함적"이며, 즉 가장 아래쪽 및 오른쪽 가장자리를 포함합니다. 예를 들어, 16x16 충돌 마스크의 경계 상자는 이제 (0.0, 0.0)에서 (16.0, 16.0)까지 생성됩니다.
호환성 모드
위에서 설명한 충돌 변경 사항은 일부 기존 프로젝트에서 문제가 발생할 수 있습니다. 이러한 프로젝트에 대해 충돌 호환성 모드를 활성화하면 이전 충돌 시스템을 사용할 수 있습니다. 그러나 새로운 시스템에 맞게 충돌 코드를 테스트하고 업그레이드하는 것이 좋습니다. 새로운 시스템은 게임의 충돌을 더 정확하고 논리적으로 만들어 줄 것입니다. 새로운 프로젝트나 기존 충돌 코드를 사용하지 않는 경우 이 옵션을 활성화할 필요는 없습니다.
항목 | 설명 |
---|---|
충돌 호환성 모드 | 이전 충돌 시스템으로 전환 |
경계 상자 좌표 | 정수 반올림 (이전) vs. 그대로 사용 (현재) |
충돌 마스크 예시 | (0, 0)에서 (15, 15) (이전) vs. (0.0, 0.0)에서 (16.0, 16.0) (현재) |
권장 사항 | 새로운 시스템에 맞게 코드 업그레이드 |
활용 예제
// 충돌 체크 예제
if (place_meeting(x, y, obj_wall)) {
// 벽과 충돌 시 처리
x -= 1; // 왼쪽으로 이동
}
// 충돌 마스크 설정 예제
sprite_index = spr_player;
mask_index = spr_player_mask; // 사용자 정의 충돌 마스크 사용
// 충돌 이벤트 예제
event_perform(ev_collision, other);
// 충돌 호환성 모드 활성화
if (collision_compatibility_mode) {
// 이전 충돌 시스템 사용
}
// 새로운 충돌 시스템 테스트
if (collision_rectangle(x, y, x + width, y + height, obj_enemy, false, true)) {
// 적과 충돌 시 처리
}