0

私は、大学のゲームデザインクラスのために、c# xna でトップダウンの 2D RPG ゲームを作成しています。敵をプレイヤーに向けて移動させる単純な AI を作成しようとしています。現在、私のコードは次のとおりです

    /// <summary>
    /// method to move the enemy
    /// </summary>
    /// <param name="target">the position of the target</param>
    /// <returns>the new position to be moved to</returns>
    public virtual Vector2 move(Vector2 target)
    {
        Vector2 temp = (target - Position); // gets the difference between the target and position
        temp.Normalize();                   // sets the vector to unit vector
        temp *= moveSpeed;                  // sets the vector to be the length of moveSpeed
        float x = temp.X;
        float y = temp.Y;
        float xP, yP;
        double angle = Math.Acos(((x * direction.X) + (y * direction.Y)) / (temp.Length() * direction.Length())); //dot product finds the angle between temp and direction
        angle *= agility;                                                                                        //gets the angle to move based on agility
        xP = (float)(Math.Cos(angle) * (x - direction.X) - Math.Sin(angle) * (y - direction.Y) + x); 
        yP = (float)(Math.Sin(angle) * (x - direction.X) - Math.Cos(angle) * (y - direction.Y) + y);            // these lines rotate the point x,y around the direction vector by angle "angle"
        return new Vector2(xP, yP);
    }

update メソッドでターゲットが正しく渡されます。

    /// <summary>
    /// updates the enemy
    /// </summary>
    public void update()
    {
        this.Position = move(Game1.player.Position);
    }

しかし、敵はまったく動かない。敏捷性と移動速度が 0 でないことを確認するコードをコンストラクターに追加しました。これらの値を変更しても何も起こりません。

助けてくれてありがとう。

4

1 に答える 1

0

コードでこれを返します(方向の角度のコード):

xP = (float)(Math.Cos(angle) * (x - direction.X) - Math.Sin(angle) * (y - direction.Y) + x);  
yP = (float)(Math.Sin(angle) * (x - direction.X) - Math.Cos(angle) * (y - direction.Y) + y);            // these lines rotate the point x,y around the direction vector by angle "angle" 

return new Vector2(xP, yP); 

しかし、あなたは移動のためにこれを返す必要があります:

temp *= moveSpeed;                  // sets the vector to be the length of moveSpeed    
float x = temp.X;    
float y = temp.Y; 
...

return new Vector2(x, y);
于 2012-10-03T19:11:36.367 に答える