움직이는 대상을 맞추기 위해 샷 각도와 속도를 계산하는 방법은 무엇입니까?


11

나는 2D 안드로이드 게임을 개발 중이며 AI 발사체가 경로를 따라 가거나 자유롭게 움직이는 적을 공격하기위한 목표 알고리즘을 만들고 있습니다. 현재는 목표물이 멀리 떨어진 곳을 계산하고 발사체를 발사하여 그 거리에서 목표를 달성합니다. 물론 이것은 목표를 달성하기 위해 발사체 속도를 변화시키는 것을 의미합니다.

발사체가 발사해야 할 때와 일정한 속도로만 이동할 수 있다면 목표 위치를 계산하는 간단한 알고리즘 (최적의 알고리즘)에 대한 팁이 있습니까? 발사체가 목표 속도의 두 배가됩니까?

내가 생각할 수있는 유일한 방법은 검색과 관련이 있으며 상당히 커 보입니다.



@JohnMcDonald : 선형이 아니라 포물선 발사체에 관한 것이면 관련이 없습니다. 이 훨씬 더 가깝다 : gamedev.stackexchange.com/questions/4995/...
E100

답변:


13

내가 만든 타워 디펜스 게임에서 나는 2 차 방정식을 사용하여 교차점을 예측하여 조준점을 예측했습니다. 다음 조준 코드 스 니펫은 적이 일정한 속도와 방향으로 이동한다고 가정합니다. 또한 발사체가 알려진 일정한 속도로 움직일 것이라고 가정합니다 (임의의 속도 일 수 있지만 알고리즘에 알려 져야 함).

Vector totarget =  target.position - tower.position;

float a = Vector.Dot(target.velocity, target.velocity) - (bullet.velocity * bullet.velocity);
float b = 2 * Vector.Dot(target.velocity, totarget);
float c = Vector.Dot(totarget, totarget);

float p = -b / (2 * a);
float q = (float)Math.Sqrt((b * b) - 4 * a * c) / (2 * a);

float t1 = p - q;
float t2 = p + q;
float t;

if (t1 > t2 && t2 > 0)
{
    t = t2;
}
else
{
    t = t1;
}

Vector aimSpot = target.position + target.velocity * t;
Vector bulletPath = aimSpot - tower.position;
float timeToImpact = bulletPath.Length() / bullet.speed;//speed must be in units per second

또한 충돌 시간을 결정하기 때문에 해당 시점의 대상 위치에서 충돌 그래픽을 호출하기 위해 붙여 넣을 때까지 기다렸습니다. 충돌을 감지하기 위해 충돌을 감지 할 필요가 없습니다.


"적중을 결정하기 위해 충돌 감지가 필요하지 않습니다." -목표물이 속도와 방향을 유지하도록 제한되어있는 경우. --- 그러나 AI가 활성화되어 있거나 더 나쁘고 플레이어가 슈팅 게임을 시작한 후 움직일 수있는 경우 충돌 감지가 아닌 적시에 적중을 기록하면 플레이어 기반의 결과로 이어집니다. 불쾌한 버그 / 결함으로 인식됩니다.
XenoRo

@TheLima yup은 답의 두 번째 문장에서 말하는 것처럼. ;-)
Steve H

이것은 내 시나리오에 거의 완벽하지만이 두 가지 추가 변수, 발사체 가속, 탑 자체의 움직임을 어떻게 고려할 것입니까?
Jack

a0 은 무엇입니까 ? 이것은 제로 예외에 의한 나누기를 생성하지만 변수 t와 관련하여 무엇을 의미합니까? '매우 큰 숫자'로 간주되어야합니까, 아니면 가장 좋은 경우는 무엇입니까?
firelynx 2016 년

이것의 직관에 관한 좋은 책이 있습니까? 이 수학을 어떻게 알았는지 궁금합니다.
davidkomer

4

여기에 이미지 설명을 입력하십시오

발사체가 발사되는 동안의 목표 위치 인 AI와 사망 시점의 목표 위치는 삼각형을 형성합니다.

  1. 측면 길이 a, 발사체 속도
  2. 목표 속도 인 측면 길이 b
  3. 대상의 모션 대상의 모션 각도입니다.

삼각형의 세 부분 인 SSA 케이스가 있으므로 다음과 같이 해결하십시오.

  1. 모션 각도와 AI의 위치를 ​​기준으로 각도 B를 찾습니다.
  2. 각을 찾기 위해 죄의 법칙을 사용하십시오

각도 A를 사용하면 발사체가 발사되는 각도를 결정할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.