敌舰向玩家旋转但没有锁定到位

时间:2017-12-26 12:38:14

标签: c# monogame

当我的敌舰向玩家移动时,我发现它们之间的距离为

private float FindDistance(Vector2 heroCenter, Vector2 spritePos)
{
    var deltaX = Math.Pow((spritePos.X - heroCenter.X), 2); // the 2 is the power value (into the power of 2)
    var deltaY = Math.Pow((spritePos.Y - heroCenter.Y), 2);
    float distance = (float)Math.Sqrt(deltaX + deltaY);
    return distance; // returns the distance between the two objects
}

然后用这段代码计算敌舰的旋转角度

distanceFromHero = FindDistance(Constants.heroCenter, spritePos);
if (distanceFromHero < Constants.HeroWithinRange)
{
    heroClose = true;
    VelocityX *= .985f; // enemy reduces vel X
    VelocityY *= .985f; // enemy reduces vel Y
    //atan2 for angle
    var radians = Math.Atan2((spritePos.Y - Constants.heroCenter.Y), (spritePos.X - Constants.heroCenter.X));
    //radians into degrees
    rotationAngle = (float)(radians * (180 / Math.PI));
}
else
{
    heroClose = false;
}
但奇怪的是,敌人虽然朝着玩家移动但并没有锁定并保持稳定,而是像钟摆一样运动,当他们在同一点上时,敌舰无休止地旋转。一些代码帮助会有所帮助。

1 个答案:

答案 0 :(得分:0)

我在一个XBox论坛中发现的问题的完美答案,该论坛无法加载到Visual Studio 2017中,所以我提出了一个新的解决方案。希望其他人可以从这个由微软制作的优秀教程中受益。解决方案是here.