2012-04-29 6 views
1

아크에 의한 2D 충돌 감지를 구현해야합니다. 나는 선수 (검은 점)와 적 (붉은 점)을 가지고있다. 플레이어는 어떤 방향으로 공격 할 수 있으며 그의 히트 영역은 120도 (녹색 선이 표시)와 특정 반경 (검은 색 곡선)입니다. 호에서의 2D 충돌 감지

My art

어떻게 탐지를 달성하기 위해?

플레이어와 적 사이의 각도를 계산하는 코드를 작성했지만 플레이어의 방향 벡터를 사용하여 호 안에 있는지 확인하는 방법을 이해할 수 없습니다.

+0

커브와 녹색 선의 길이 사이에 관계가 있습니까? –

+0

녹색 선은 각도를 나타냅니다. 커브는 실제 반지름입니다 –

+0

예, 플레이어가이 호를 회전시킬 수 있습니다 –

답변

2

적의 각도와 거리를 계산하십시오. 그들이 범위 내에 있는지 확인하기 위해 이것을 사용하십시오.

데카르트 좌표를 사용하고 있으므로 사각형이있는 영역이므로 방사형 좌표로 변환하면 문제가 간단 해집니다. 새로운 정보

  • 벡터 A를

    플레이어의 방향 벡터이다.

  • 적으로부터 플레이어에게 벡터 B를 계산합니다.

벡터 B의 길이가 너무 길지 않은지 확인하십시오. 각도가 60 개도 (반 120)을 적 범위 인 경우

(| A.B |/| | ||의 B) ACOS :

이어서 벡터 사이의 각도는 다음과 같이 주어진다.

+0

감사합니다. 접근 방식이 내 것이 분명합니다. 그것은 작동합니다. –

1

먼저 플레이어는 방향, 예를 들어 2D 벡터를 가져야합니다. 간단히 말해 첫 번째 녹색 선 = 각은 다른 녹색 선과의 각도입니다.

당신은이 검사 수행해야 적의와 플레이어 사이의 거리가 반경보다 작은 경우하지 않을 경우,

  1. 확인을 예 다음
  2. 가상 그리기 경우, 다음 적으로 이동 플레이어와 적 사이의 거리를 계산하고이 선과 플레이어의 방향 사이의 각도를 계산합니다.이 각도가 히트 영역 각도의 절반보다 작 으면 (예에서는 60보다 작은 경우) 플레이어가 충돌 할 수 있습니다 적이 아닌 경우 다음으로 이동합니다.

아이디어로 충분해야합니다. 도움이 되셨을 것입니다.

1

단위 길이 벡터가 "앞으로"라고 가정 해 봅시다. 그리고 잠재적 인 목표를 가리키는 단위 길이 벡터가 있다고 가정 해 봅시다. target이 ark 안에 있다면,

dot(forwardVector, targetVector) >= cosf(arcAngle/2).

벡터가 단위 길이가 아닌 경우 물론 작동하지 않습니다. 목표물이 필요한 각도 안에 있는지 확인합니다.

필요한 거리 내에 있는지 확인하는 것은 간단하고 꽤 많이 squaredLength(targetPosition - playerPosition) <= arkDistance*arkDistance입니다. 여기에서 squaredLength는 dot(vector, vector)입니다.