我的暴民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度到零度之间来回移动
if (instant < rotation )
{
rotation += rotationspeed / 2000;
}
else if (rotation < instant)
{
rotation -= rotationspeed / 2000;
}
感谢您的帮助
答案 0 :(得分:1)
而不是
if (instant < rotation )
{
rotation += rotationspeed / 2000;
}
else if (rotation < instant)
{
rotation -= rotationspeed / 2000;
}
试
rotation = Math.Lerp(rotation, instant, 0.1);
0.1控制旋转“速度”。使用lerp使运动更加自然,并将解决角度在正负之间振荡的问题。
答案 1 :(得分:0)
我想通了,
trivial.X = Posistion.X - Target.X;
trivial.Y = Posistion.Y - Target.Y;
错误需要
trivial.X = Target.X -Posistion.X ;
trivial.Y = Target.Y - Posistion.Y ;
谢谢你,没有你的帮助我永远不会注意到:D