C # - Перемещение ящиков с изображениями в сторону другого ящика с изображениями (логика NPC и векторы) - PullRequest
0 голосов
/ 10 ноября 2018

Я пытаюсь автоматически перемещать картинки (NPC) по направлению к главному персонажу (pictureBox1), в основном я хочу, чтобы они преследовали pB1.Я очень плохо знаком с векторами.Я не мог понять логику очень хорошо.Сначала позвольте мне показать коды.

  int pictx,picty,mcx,mcy;

    private void Monster_drag_Tick(object sender, EventArgs e)
    {
        foreach (var pict in this.Controls.OfType<PictureBox>())
        {
                pictx = pict.Location.X;
                picty = pict.Location.Y;
                mcx = pictureBox1.Location.X;
                mcy = pictureBox1.Location.Y;
            if (pict.Name != "pictureBox1")
            {      
                ChaseVector(mcx, mcy, 0.5f);                    
            }
        }
    }

Это было событие таймера.Интервал 1000, кстати.Также у меня есть Struct, который автоматически создает картинки.Я вытаскиваю все ящики с картинками, которые были созданы в Struct, с помощью foreach, как вы можете видеть.

А вот метод Vector;

public void ChaseVector(int x, int y, float speed)
    {
        float tx = x - pictx;
        float ty = y - picty;
        double length = Math.Sqrt(tx * tx + ty * ty);
        if (length < speed)
        {
            // move towards the goal
            pictx = (int)(pictx + speed * tx / length);
            picty = (int)(picty + speed * ty / length);
            foreach (var pict in this.Controls.OfType<PictureBox>())
            {
                if (pict.Name != "pictureBox1")
                {
                    pict.Location = new Point(pictx, picty);
                }
            }
        }
        else
        {
            // already there
            pictx = x;
            picty = y;
            foreach (var pict in this.Controls.OfType<PictureBox>())
            {
                if (pict.Name != "pictureBox1")
                {
                    pict.Location = new Point(pictx, picty);
                }
            }
        }

    }

Я нашел этот код в потоке стека.Я действительно ничего не знаю о векторах.Этот код заставляет кинотеатры переходить к главному герою.Прошить их в принципе.Я хочу, чтобы они медленно гонялись за Маком, я имею в виду ходьбу.Как будто скорости нет, они просто перепрыгивают через mc каждый раз, когда я перемещаю персонажа.

В ожидании вашей помощи и, если есть лучший способ использовать Векторы, пожалуйста, сообщите.Заранее спасибо.

...