2014-09-28 2 views
0

У меня есть башня, которая предсказывает положение движущихся мишеней и стреляет снарядом для пересечения.Плавно поверните башню и сохраните точность

метод он использует на основе проверенного ответа на этот пост (2d game : fire at a moving target by predicting intersection of projectile and unit)

и возвращает угол поплавком, рассчитанный с atan2, я также добавить TwoPI удалить негативы.

Если я Lerp движения башенки как этот

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

Это означает, что чем ближе турель получает меньшие шаги, которые он принимает, снижая скорость вращения и точность отпадет.

Если я использую фиксированные шаги делает что-то вроде этого

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

несколько лучшего результата, но я теряю высокую точность, где угол не может получить какую-либо ближе, чем размер фиксированного шага.

Есть ли лучший способ сделать что-то подобное?

Желаемый конечный результат будет плавным перемещением по всему, с турелью, способной ускоряться или замедляться с максимальной скоростью, так как она должна достигать правильного угла, с некоторой дополнительной инерцией, когда внезапно приходится вращать другой путь.

Надеюсь, я смогу немного поработать, но любые советы оценены.

ответ

0

Вы можете получить эту точность, увидев, что вы «прогнали» движение по углу с помощью фиксированного шага. Например:

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

Конечно, вы, возможно, потребуется изменить этот код, чтобы учесть оберточной углы (например, -1 становится 359), в зависимости от того, как вы сохраняете углы.

Смежные вопросы