2D 하향식 슈팅 게임을하고 있는데 기본 사각형 경계 상자 충돌 시스템을 넘어서야합니다.
스프라이트가 여러 개인 큰 레벨이 있는데 모두 모양과 크기가 다릅니다. 스프라이트의 텍스처는 모두 투명한 배경을 가진 정사각형 PNG 파일이므로 플레이어가 투명한 배경이 아닌 텍스처의 컬러 부분으로 들어올 때 충돌을 일으킬 수있는 방법이 필요합니다.
다음과 같이 충돌을 처리 할 계획입니다.
- 스프라이트가 플레이어 범위 내에 있는지 확인하십시오
- 올바른 경계 상자 충돌 테스트 수행
- 정확한 충돌을하십시오 (도움이 필요한 경우)
모든 요구 사항을 염두에 두고이 기술을 사용하고 싶기 때문에 고급 기술은 신경 쓰지 않지만 어떻게 접근 해야하는지 잘 모르겠습니다. 시도 할 기술이나 라이브러리. 각 스프라이트에서 투명 배경을 뺀 것을 정확하게 나타내는 일종의 모양을 만들고 저장해야 할 것입니다.
픽셀 당 속도가 느리다는 것을 읽었으므로 큰 레벨과 많은 수의 객체를 고려할 때 적절하다고 생각하지 않습니다. Box2d도 살펴 보았지만 SFML을 사용하여 문서를 작성하고 실행하는 방법에 대한 많은 문서 또는 예제를 찾을 수 없었습니다.
답변
- 1 단계 : 그리드를 생성하고 움직이는 모든 객체에 대해 그리드를 업데이트합니다.
- 동일한 정사각형의 객체 간 충돌 만 확인하십시오.
- 객체의 경계 상자가 사각형과 교차하는지 확인하십시오.
- 저해상도 버전의 외곽선을 사용하여 픽셀 완벽한 충돌을 확인하십시오 (게임 물리 참조).
- 게임 물리학 (Q 2)에 설명 된대로 개요 추적을 정상적으로 확인하십시오.
1 단계:
그리드 2D 배열을 만듭니다. 모든 객체는 x, y 위치와 너비와 높이가 차지하는 사각형을 알고 있습니다. 개체가 멀리 이동하면 이전 사각형에서 자신을 지우고 사용중인 새 사각형을 업데이트합니다.
이것은 n 개의 객체에 대해 총 O (n) 만 필요합니다. 특정 객체 O (1)
2 단계:
동일한 정사각형으로 개체 간 충돌에 대한 모든 검사를 실행하십시오. 다른 정사각형의 객체 간 충돌 테스트를 실행할 필요가 없습니다. 개체가 평균 크기 인 경우 최대 4 개의 사각형을 차지할 수 있습니다. 이것은 확인이 거의 없다는 것을 의미합니다.
3 단계 :
객체 사각형 사이의 교차점을 확인하십시오. 교차로가 없으면 중지하십시오.
4 단계 :
교차 영역 내부에서만 개체의 윤곽선 사이의 픽셀 완벽한 충돌을 확인하십시오. 충분히 빠르다. 그렇지 않은 경우 저해상도 2d- 부울 배열을 만들고 먼저 확인하십시오. 충돌이 발견되면 고해상도 2d- 어레이에서 작은 세그먼트 만 확인하면 소중한 시간을 절약 할 수 있습니다.
게임 세계를 사각형 격자 로 나누는 방법에 대한 개념은 다음을 읽으십시오 .
픽셀 퍼펙트 충돌 을 감지하는 방법에 대한 이해를 위해 이것을 읽으십시오 .
성능을 크게 향상시킬 수 있습니다.
-
저해상도 (1/16) 버전의 개요를 저장하여 먼저 확인하십시오.
-
두 rect가 교차하는 영역에서만 체크인하십시오.
-
개요를 대략 세그먼트로 나누고 세그먼트 간의 충돌 만 먼저 확인합니다.
의견을 환영합니다 그리고 내가 자세히 설명하겠습니다.