我有一个炮塔可以预测一个移动的目标位置并发射一个射弹相交。
它使用的方法基于这篇文章中的检查答案(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 :(得分:0)
您可以通过查看是否超过&#34;来获得此准确性。使用固定步长的角度移动。例如:
if (_angle < newAngle)
{
_angle += fixedStep;
if(_angle > targetAngle)
{
_angle = targetAngle;
}
}
if (_angle > newAngle)
{
_angle -= fixedStep;
if(_angle < targetAngle)
{
_angle = targetAngle;
}
}
当然,您可能需要修改此代码以考虑缠绕角度(例如-1变为359),具体取决于您存储角度的方式。