Как двигать спрайт в направление куда он смотрит?

109
20 июля 2019, 13:30

Есть такой код управления спрайтом:

    if (sf::Keyboard::isKeyPressed(sf::Keyboard::W))
    {
        player.move(0, -Speed * time);
    }
    if (sf::Keyboard::isKeyPressed(sf::Keyboard::S))
    {
        player.move(0, Speed * time);                   
    }
    if (sf::Keyboard::isKeyPressed(sf::Keyboard::A))
    {
        player.rotate(-Speed * time);
    }
    if (sf::Keyboard::isKeyPressed(sf::Keyboard::D))
    {
        player.rotate(Speed * time);
    }

Спрайт вращается вокруг своей оси, но кпонки w,s перемещают спрайт не так как надо. Как его перемещать в то направление куда он смотрит? Какие формулы применять? Чтоб было наподобие танков с видом сверху.

Answer 1

Вперед - вот так:

player.move(Speed * time * cos(угол), Speed * time * sin(угол));

Назад - аналогично, только с -Speed вместо Speed.

Здесь угол - это тот угол, который меняется вызовом player.rotate.

Использовать одну и ту же скорость Speed для поворота и движения - слегка странно. Может иметь смысл использовать две отдельные константы.

READ ALSO
ostream::operator<<();

ostream::operator<<();

вот код:

120
Ошибка при удалении элемента в deque через итератор

Ошибка при удалении элемента в deque через итератор

myDequeerase(min) выдает ошибку: cannot seek value-initialized deque iterator

117
Параметр функции в c++

Параметр функции в c++

Вкратце можно сказать следующее

117
Как сравнить изображения на java?

Как сравнить изображения на java?

Есть ли встроенные методы, позволяющие сравнить изображения на полное сходство (Не просто == или imgequals(img2), ибо в первом это разные объекты,...

122