Battle Game - Как сделать направление стрельбы ракетой - PullRequest
0 голосов
/ 17 марта 2020

Это связано с первым вопросом, который я задал о создании бесконечной ракеты

Теперь, что я хотел сделать, так это когда мой Основной танк меняет направление, скажем, он поворачивает направо. Предположительно, когда он стреляет, он пойдет в ту сторону, где стоит танк. Я не могу понять это, так как это было закодировано на Таймере.

  private void ShootMissile()
    {

        var missile = new PictureBox();
        this.Controls.Add(missile);
        missile.Width = 10;
        missile.Height = 10;
        missile.BackColor = Color.Black;

        missile.Top = MainTank.Top + MainTank.Height / 2 - missile.Height / 2;
        missile.Left = MainTank.Left + MainTank.Width / 2 - missile.Width / 2;

        missile.BringToFront();

        missiles.Add(missile);

    }
       private void shootingTimer_Tick(object sender, EventArgs e)
    {

        foreach(var missile in missiles)
        {
                missile.Top -= 5;
        }
    }

1 Ответ

1 голос
/ 17 марта 2020

Это работает для любого угла. Если ваш танк может вращаться только с шагом 90º, углы будут 0 для правой, 90º для восходящей, 180º для левой и 270º для нижней.

В зависимости от ориентации вашего спрайта танка, вам может понадобиться добавить смещение в прямом направлении.

var tankForwardDir = 0; 
var radians = tankForwardDir * 3.14159f/180;

var t = 10; // distance to move the missile. 

var dx = Math.Cos(radians)*t;
var dy = Math.Sin(radians)*t;

missile.Top += dy;
missile.Left += dx;
...