0

私の暴徒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.1などは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;
                    }

助けてくれてありがとう

4

2 に答える 2

1

それ以外の

           if (instant < rotation )
                {
                     rotation += rotationspeed / 2000;
                }
            else if (rotation < instant)
                {
                     rotation -= rotationspeed / 2000;
                }

試す

rotation = Math.Lerp(rotation, instant, 0.1);

0.1 は、回転の「速度」を制御します。lerp を使用すると動きがより自然になり、正と負の間で角度が振動する問題が修正されます。

于 2013-03-13T20:15:13.083 に答える