사이드 스크롤러를위한 초보적인 AI를 만들고 있는데 AI 장치가 단순히 점프하여 A 지점에서 B 지점에 도달 할 수 있는지 알아야합니다.
내 캐릭터의 비행 궤적은 공중에서 힘을 가할 수 있기 때문에 약간 쓸모가 없습니다 (예 : Jazz Jackrabbit 2와 같이), 발사체 의 고전적인 궤적 과는 달리 ...
던지거나 발사 된 발사체가 추진없이 걸리는 경로 (...)
... 내 문제는 추진력이 있는 발사체 (예 : 로켓)에 관한 것입니다.
이것을 설명하기 위해, 이것은 점프하고 "왼쪽 버튼"을 계속 누르면 캐릭터의 비행 곡선 모양입니다 (왼쪽 끝이 다르게 보임).
비행 중에 적용되는 힘은 항상 X 축에 평행하므로 "왼쪽"을 누르고 있으면 F = (-f, 0) 이고 "오른쪽"을 누르고 있으면 F = (f, 0) 입니다.
그는 스키 점퍼처럼 매우 움직일 수 있습니다.
그래서 그것은 포물선 인 고전적인 궤도와는 많이 다릅니다 (출처 : wikipedia ) :
더 어려워하기 위해 간단한 공기 저항을 시뮬레이션하여 캐릭터가 최대 속도 값까지만 가속 할 수 있습니다.
이것은 반대 방향으로 작은 힘 을 가하여 이루어집니다 .
b2Vec2 vel = body->GetLinearVelocity();
float speed = vel.Normalize(); //normalizes vector and returns length
body->ApplyForce( AIR_RESISTANCE_MULT * speed * speed * -vel, body->GetWorldCenter() );
AIR_RESISTANCE_MULT는 필자의 경우 0.1과 같은 상수입니다.
내 캐릭터가 무한히 작은 포인트라고 가정 해 봅시다.
그리고 장애물을 고려 하지 않기 때문에 내 질문은 다음과 같습니다.
초기 속도 V, 점프시 캐릭터에 적용 하는 임펄스 J = (0, -j) , 중력 G = (0, g) , 힘 F = (+ -f ) 를 결정하는 방법 (적어도 확실하게 추측) , 0) 비행 중에 공기 저항을 실제로 고려하기로 결정한 경우 비행 및 AIR_RESISTANCE_MULT 동안 지속적으로 적용됩니다 (선택 사항) . 내 캐릭터가 취할 경로에 의해 그려진 곡선 아래에 점이 있는지 여부는 무엇입니까?
나는 계산을 어디에서 시작할지 말 그대로 알지 못하며 실제로 정확한 답에 관심이있는 것은 아닙니다. AI가 결코 완벽하게 행동 할 필요가 없기 때문에 잘 작동하는 해킹 / 근사가 좋습니다.
편집 : Jason이 제안한 것처럼 시뮬레이션을 사용 하여이 문제를 해결하기로 결정했지만 그러한 경우를 처리하는 방법은 무엇입니까?
C 에서 D 로 세그먼트를 그려 원하는 지점이이 세그먼트 아래에 있는지 확인해야합니까?
또는 C 와 D 사이의 시간 간격을 이진 검색하여 원하는 지점과 수평 거리에 충분히 가까운 지점을 찾은 다음 수직 차이 만 확인해야합니까? (나에게 약간의 잔인한 것으로 보인다)