平稳旋转转台并保持精度
本文关键字:精度 旋转 转转 | 更新日期: 2023-09-27 18:24:57
我有一个炮塔,它可以预测移动目标的位置,并发射炮弹使其相交。
它使用的方法是基于这篇文章中的检查答案(2d游戏:通过预测炮弹和单位的交叉点向移动目标开火)
并返回一个用atan2计算的浮动角度,我还添加了TwoPI来去除负片。
如果我听到炮塔像一样移动
currentAngle = MathHelper.Lerp(currentAngle, newAngle, speed)'
这意味着炮塔越靠近,所需的步数就越小,从而降低了转速,精度也随之下降。
如果我使用固定的步骤来做类似的事情
if (_angle < newAngle)
{
_angle += fixedStep;
}
if (_angle > newAngle)
{
_angle -= fixedStep;
}
这是一个更好的结果,但我失去了精确的精度,因为角度不能比固定步长的大小更接近。
有更好的方法做这样的事情吗?
所需的最终结果是在任何物体上平稳移动,炮塔能够在达到正确角度时从最高速度加速或减速,当突然不得不以另一种方式旋转时,还会增加一些惯性。
希望我最终能解决一些问题,但任何建议都很感激。
您可以通过查看是否使用固定步长"超过"角度移动来获得此精度。例如:
if (_angle < newAngle)
{
_angle += fixedStep;
if(_angle > targetAngle)
{
_angle = targetAngle;
}
}
if (_angle > newAngle)
{
_angle -= fixedStep;
if(_angle < targetAngle)
{
_angle = targetAngle;
}
}
当然,根据存储角度的方式,您可能需要修改此代码以考虑包装角度(如-1变为359)。