一尘不染

通过旋转炮塔使计算机实现360度= 0度

algorithm

我正在做一个游戏,其中是一个计算机控制的炮塔。炮塔可以旋转360度。

它使用触发来找出瞄准枪所需的角度(objdeg),并将枪的当前角度存储在(gundeg)中

以下代码以设定的速度旋转喷枪

if (objdeg > gundeg)
{
    gundeg++;
}
if (objdeg < gundeg)
{
    gundeg--;
}

问题是,如果有一个物体处于10度角,则枪会旋转,射击并摧毁它;如果另一个目标出现在320度角,则枪将逆时针旋转310度,而不仅仅是顺时针旋转60度以击中它。

我该如何修复我的代码,以免其行为愚蠢?


阅读 200

收藏
2020-07-28

共1个答案

一尘不染

如果您需要在一个方向上旋转180度以上以对准转塔,那么在另一个方向上旋转会更快。

我只是检查一下,然后朝适当的方向旋转

if (objdeg != gundeg)
{
    if ((gundeg - objdeg) > 180)
       gundeg++;
    else
       gundeg--;
}

编辑:新解决方案

我已根据评论中的反馈改进了解决方案。这确定目标是在炮塔的“左”还是“右”,并确定转弯的方向。如果目标距离超过180度,它将反转该方向。

if (objdeg != gundeg)
{
  int change = 0;
  int diff = (gundeg - objdeg)%360;
  if (diff < 0)
     change = 1;
  else
     change = -1;

  if (Math.Abs(diff) > 180)
     change = 0 - change;

  gundeg += change;
 }
2020-07-28