태그 보관물: sfml

sfml

빠르고 정확한 2D 충돌 필요한 경우) 모든 요구

2D 하향식 슈팅 게임을하고 있는데 기본 사각형 경계 상자 충돌 시스템을 넘어서야합니다.

스프라이트가 여러 개인 큰 레벨이 있는데 모두 모양과 크기가 다릅니다. 스프라이트의 텍스처는 모두 투명한 배경을 가진 정사각형 PNG 파일이므로 플레이어가 투명한 배경이 아닌 텍스처의 컬러 부분으로 들어올 때 충돌을 일으킬 수있는 방법이 필요합니다.

다음과 같이 충돌을 처리 할 계획입니다.

  1. 스프라이트가 플레이어 범위 내에 있는지 확인하십시오
  2. 올바른 경계 상자 충돌 테스트 수행
  3. 정확한 충돌을하십시오 (도움이 필요한 경우)

모든 요구 사항을 염두에 두고이 기술을 사용하고 싶기 때문에 고급 기술은 신경 쓰지 않지만 어떻게 접근 해야하는지 잘 모르겠습니다. 시도 할 기술이나 라이브러리. 각 스프라이트에서 투명 배경을 뺀 것을 정확하게 나타내는 일종의 모양을 만들고 저장해야 할 것입니다.

픽셀 당 속도가 느리다는 것을 읽었으므로 큰 레벨과 많은 수의 객체를 고려할 때 적절하다고 생각하지 않습니다. Box2d도 살펴 보았지만 SFML을 사용하여 문서를 작성하고 실행하는 방법에 대한 많은 문서 또는 예제를 찾을 수 없었습니다.



답변

  1. 1 단계 : 그리드를 생성하고 움직이는 모든 객체에 대해 그리드를 업데이트합니다.
  2. 동일한 정사각형의 객체 간 충돌 만 확인하십시오.
  3. 객체의 경계 상자가 사각형과 교차하는지 확인하십시오.
  4. 저해상도 버전의 외곽선을 사용하여 픽셀 완벽한 충돌을 확인하십시오 (게임 물리 참조).
  5. 게임 물리학 (Q 2)에 설명 된대로 개요 추적을 정상적으로 확인하십시오.

1 단계:

그리드 2D 배열을 만듭니다. 모든 객체는 x, y 위치와 너비와 높이가 차지하는 사각형을 알고 있습니다. 개체가 멀리 이동하면 이전 사각형에서 자신을 지우고 사용중인 새 사각형을 업데이트합니다.

이것은 n 개의 객체에 대해 총 O (n) 만 필요합니다. 특정 객체 O (1)

2 단계:

동일한 정사각형으로 개체 간 충돌에 대한 모든 검사를 실행하십시오. 다른 정사각형의 객체 간 충돌 테스트를 실행할 필요가 없습니다. 개체가 평균 크기 인 경우 최대 4 개의 사각형을 차지할 수 있습니다. 이것은 확인이 거의 없다는 것을 의미합니다.

3 단계 :

객체 사각형 사이의 교차점을 확인하십시오. 교차로가 없으면 중지하십시오.

4 단계 :

교차 영역 내부에서만 개체의 윤곽선 사이의 픽셀 완벽한 충돌을 확인하십시오. 충분히 빠르다. 그렇지 않은 경우 저해상도 2d- 부울 배열을 만들고 먼저 확인하십시오. 충돌이 발견되면 고해상도 2d- 어레이에서 작은 세그먼트 만 확인하면 소중한 시간을 절약 할 수 있습니다.

게임 세계를 사각형 격자 로 나누는 방법에 대한 개념은 다음을 읽으십시오 .

효율적인 충돌 감지 시스템 만들기

픽셀 퍼펙트 충돌 을 감지하는 방법에 대한 이해를 위해 이것을 읽으십시오 .

게임 물리학 / 2D 충돌 감지 AS3

성능을 크게 향상시킬 수 있습니다.

  1. 저해상도 (1/16) 버전의 개요를 저장하여 먼저 확인하십시오.

  2. 두 rect가 교차하는 영역에서만 체크인하십시오.

  3. 개요를 대략 세그먼트로 나누고 세그먼트 간의 충돌 만 먼저 확인합니다.

의견을 환영합니다 그리고 내가 자세히 설명하겠습니다.

교차로를 확인하십시오


답변