충돌 체크: Axis Aligned Bounding Box
게임 개발에서 충돌 테스트의 가장 기본적인 전략은 AABB인데, Axis Aligned Bounding Box란 좌표 축에 나란한 사각형으로서, 캐릭터를 감싸는 최소한의 너비와 높이를 가진 직사각형이다.
두 개의 좌표축에 나란한 직사각형이 조금이라도 서로 겹치는지를 판단하면 된다.
두 개의 좌표축에 나란한 직사각형이 조금이라도 서로 겹치는지를 판단하면 된다.
- 바운딩 박스 A의 최대 x 좌표(right)가 바운딩 박스 B의 최소 x 좌표(left)보다 작으면 충돌이 아니다.
- 바운딩 박스 A의 최소 x 좌표(left)가 바운딩 박스 B의 최대 x 좌표(right)보다 크면 충돌이 아니다.
- 바운딩 박스 A의 최대 y 좌표(top)가 바운딩 박스 B의 최소 y 좌표(bottom)보다 작으면 충돌이 아니다.
- 바운딩 박스 A의 최소 y 좌표(bottom)가 바운딩 박스 B의 최대 y 좌표(top)보다 크면 충돌이 아니다.
이를 자바 코드로 작성하면 다음과 같다. 참 쉽다, 비교 몇 번이면 끝난다.
public static boolean checkAABB(RectF a, RectF b) {
return a.right > b.left
&& a.left < b.right
&& a.top > b.bottom
&& a.bottom < b.top;
}
그런데, 아래 그림에서처럼 캐릭터가 회전을 한다거나 하는 경우에는 정확도가 떨어진다는 단점이 있다.
다음 글에 이어서...
댓글
댓글 쓰기