-3

敵をプレイヤーに追従させ、20 ピクセル以内で停止させようとしています。Vector2.Lerp(); を含む多くのアルゴリズムを試しました。これを修正しようとする方法ですが、ビルドを壊し続けます。どんな助けでも大歓迎です。コードは以下です。

public void Update(GameTime gameTime)
{
    if (this.IsAlive)
    {
        float elapsed = (float)gameTime.ElapsedGameTime.TotalSeconds;
        double distanceToPlayer = Math.Sqrt(Math.Pow(Level.Player.Position.X - this.Position.X, 2) + Math.Pow(Level.Player.Position.Y - this.Position.Y, 2));

        // Calculate tile position based on the side we are walking towards.
        float posX = Position.X + localBounds.Width / 2 * (int)direction;
        int tileX = (int)Math.Floor(posX / Tile.Width) - (int)direction;
        int tileY = (int)Math.Floor(Position.Y / Tile.Height);

        if (waitTime > 0)
        {
            // Wait for some amount of time.
            waitTime = Math.Max(0.0f, waitTime - (float)gameTime.ElapsedGameTime.TotalSeconds);
            if (waitTime <= 0.0f)
            {
                // Then turn around.
                direction = (FaceDirection)(-(int)direction);
            }
        }
        else
        {
            // If we are about to run into a wall or off a cliff, start waiting.
            if (Level.GetCollision(tileX + (int)direction, tileY - 1) == TileCollision.Impassable || Level.GetCollision(tileX + (int)direction, tileY) == TileCollision.Passable) //is the enemy is close and is not attacking, attack and turn!
            {
                waitTime = MaxWaitTime;
            }
            else
            {
                // Move in the current direction.
                Vector2 velocity = new Vector2((int)direction * MoveSpeed * elapsed, 0.0f);
                position = position + velocity;
            }
        }
        dtAttack += gameTime.ElapsedGameTime;
        AttackPlayer();
    }
    else
    {
        dt += gameTime.ElapsedGameTime;
        if (dt.TotalSeconds > (sprite.Animation.FrameCount * sprite.Animation.FrameTime))
            this.Remove = true;
    }
}
4

1 に答える 1

1

画面上で 20 ピクセルにする必要がありますか? 奇妙に思えます。Vector2.Distanceメソッドを使用して、プレイヤーと敵の間のユークリッド距離を計算してみることができます。距離が20以下なら敵を止める。そうでない場合は、プレーヤーをフォローし続けます。

于 2012-12-18T19:19:24.197 に答える