-
Notifications
You must be signed in to change notification settings - Fork 1
02_11.CollisionDetection
jdeokkim edited this page May 6, 2022
·
4 revisions
우리가 게임을 제대로 만드려면 게임 세계의 캐릭터가 땅 또는 벽과 만나는지 확인하고, 캐릭터가 땅이나 벽을 뚫고 지나가지 않도록 캐릭터를 적절한 방향으로 밀어내야 한다. 여기서 게임 세계의 물체가 다른 물체와 충돌하는지를 확인하는 작업을 충돌 감지 (collision detection)라고 하고, 서로 충돌하는 두 물체를 적절한 방향으로 밀어내서 더 이상 충돌하지 않게 하는 작업을 충돌 해결 (collision resolution)이라고 한다.
raylib에서는 기본 도형 사이의 간단한 충돌 감지 함수는 제공하지만, 충돌 해결 함수는 따로 제공하지 않는다. 그렇기 때문에 게임 세계의 물체 사이의 충돌을 해결하는 함수는 우리가 직접 구현해야 한다. 이제 raylib가 제공하는 충돌 감지 함수들에 대해 한번 알아보자. raylib의 충돌 감지 함수들은 기본 도형 관련 함수들과 마찬가지로 raylib의 shapes
모듈 (rshapes.c
)에 정의되어 있다.
// 직사각형 `rec1`과 `rec2` 사이의 충돌을 감지한다.
RLAPI bool CheckCollisionRecs(Rectangle rec1, Rectangle rec2);
// 중심점이 `center1`이고 반지름이 `radius1`인 원과, 중심점이 `center2`
// 이고 반지름이 `radius2`인 원 사이의 충돌을 감지한다.
RLAPI bool CheckCollisionCircles(Vector2 center1, float radius1, Vector2 center2, float radius2);
// 중심점이 `center`이고 반지름이 `radius`인 원과, 직사각형 `rec` 사이의
// 충돌을 감지한다.
RLAPI bool CheckCollisionCircleRec(Vector2 center, float radius, Rectangle rec);
// 2차원 위치 `point`가 직사각형 `rec` 안에 있는지 확인한다.
RLAPI bool CheckCollisionPointRec(Vector2 point, Rectangle rec);
// 2차원 위치 `point`가 중심점이 `center`이고 반지름이 `radius`인 원 안에
// 있는지 확인한다.
RLAPI bool CheckCollisionPointCircle(Vector2 point, Vector2 center, float radius);
간단한 예시를 통해 충돌 감지 함수를 어떻게 사용하는지 알아보자.
(추가 예정)
- 오픈 소스 소프트웨어란?
- Git과 버전 관리 시스템
- GitHub를 이용한 저장소 호스팅
- 프로젝트의 기여 및 관리
- 라이브러리 소개
- 개발 환경 구축
- 첫 번째 프로그램
- 게임 창과 커서 관리
- 프레임, 시간과 타이머
- 픽셀, 선분과 기본 도형
- 마우스와 키보드 입력
- 벡터 글꼴과 비트맵 글꼴
- 이미지와 텍스처의 사용
- 카메라와 렌더 텍스처
- 충돌 감지와 충돌 해결
- 효과음과 음악 재생
- 그 외 유용한 함수