我正在做一个游戏,其中是一个计算机控制的炮塔。炮塔可以旋转360度。
它使用触发来找出瞄准枪所需的角度(objdeg),并将枪的当前角度存储在(gundeg)中
以下代码以设定的速度旋转喷枪
if (objdeg > gundeg) { gundeg++; } if (objdeg < gundeg) { gundeg--; }
问题是,如果有一个物体处于10度角,则枪会旋转,射击并摧毁它;如果另一个目标出现在320度角,则枪将逆时针旋转310度,而不仅仅是顺时针旋转60度以击中它。
我该如何修复我的代码,以免其行为愚蠢?
如果您需要在一个方向上旋转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; }