2014-09-28 1 views
0

움직이는 목표 위치를 예측하고 발사체가 교차하도록 터렛을 사용했습니다.포탑을 부드럽게 회전시키고 정확도를 유지하십시오.

이 사용하는 방법이 포스트 (2d game : fire at a moving target by predicting intersection of projectile and unit)

에서 체크 않음을 기반으로 계산 된 ATAN2 플로트 각도 복귀하고, 또한 네거티브 제거 TwoPI 추가. 나는이

currentAngle = MathHelper.Lerp(currentAngle, newAngle, speed)' 

처럼 포탑 운동을 도약한다 경우

그것은 포탑 회전 속도를 낮추는 걸리는 작은 단계를 얻고 정확도가 떨어져 내리는 가까이 의미한다.

내가 고정 사용하는 경우이

if (_angle < newAngle) 
{ 
    _angle += fixedStep; 
} 
if (_angle > newAngle) 
{ 
    _angle -= fixedStep; 
} 

다소 더 나은 결과 같은 일을 단계하지만 각도가 고정 단계의 크기보다 가까이 할 수없는 핀 포인트 정확도를 잃게됩니다.

더 좋은 방법이 있나요?

원하는 결과는 터렛이 갑자기 다른 방향으로 회전해야하는 경우 몇 가지 추가 관성과 함께 정확한 각도에 도달해야하므로 터렛이 최고 속도에서 가속 또는 감속 할 수있는 모든 것에 대해 부드럽게 움직일 수 있습니다.

희망을 갖고 결국 일부 작업을 수행 할 수 있지만 팁은 유용합니다.

답변

0

고정 된 단계를 사용하여 각도 움직임을 "지나쳤습니다"를 확인하면이 정확도를 얻을 수 있습니다. 예를 들어 :

당신이 각도를 저장하는 방법에 따라 각도 (같은 -1되고 359) 포장을 고려하여이 코드를 수정해야 할 수 있습니다 물론
if (_angle < newAngle) 
{ 
    _angle += fixedStep; 
    if(_angle > targetAngle) 
    { 
     _angle = targetAngle; 
    } 
} 
if (_angle > newAngle) 
{ 
    _angle -= fixedStep; 
    if(_angle < targetAngle) 
    { 
     _angle = targetAngle; 
    } 
} 

.

관련 문제