我的暴民 AI 遇到了麻烦
它工作到一定程度,除了它与我想要的相反,这意味着它向错误的方向转动 180 度
Target = playerST.Posistion;
Vector2 trivial;
trivial.X = Posistion.X - Target.X;
trivial.Y = Posistion.Y - Target.Y;
instant = ((float)Math.Atan2(trivial.Y, trivial.X)) + 3.141592f;
这告诉我我的目标在哪里并计算我需要旋转到的数字
它的弧度加 3.1etc 就像 180 度,因为这样计算它给我的最小值为 -3.141 或最大值为 3.141,但敌人的旋转是在 0 到 6.28 之间完成的,加上 3.141 使瞬间 = 在敌人旋转的范围,而不是在其下方 3.141
无论如何,这是我陷入困境的部分......实际的旋转
// irrelevant
if (attack == true)
{
Vector2 modelVelocityAdd = Vector2.Zero;
modelVelocityAdd.Y = -(float)Math.Sin(rotation);
modelVelocityAdd.X = -(float)Math.Cos(rotation);
modelVelocityAdd *= (0.00002f * speed);
if ((((rotation) + 0.2f)) < instant && (rotation - 0.2f) > instant)
{
modelVelocity += modelVelocityAdd;
}
// not so irrelvant and needs fixing!
if (instant < rotation )
{
rotation -= rotationspeed / 2000;
}
else if (rotation < instant)
{
rotation += rotationspeed / 2000;
}
所以我的问题是我如何阻止它向错误的方向旋转 180 度并真正让它面对玩家而不是面对完全相反的
我不能简单地做下面的事情,因为船被困在 5 度和负 5 度之间来回移动
if (instant < rotation )
{
rotation += rotationspeed / 2000;
}
else if (rotation < instant)
{
rotation -= rotationspeed / 2000;
}
谢谢你的帮助