Как именно это было бы достигнуто? Вот код, который у меня есть до сих пор, который просто вращает корабль на основе мыши, а также пули:
xPos = ship.getPosition().x, yPos = ship.getPosition().y, mousex = sf::Mouse::getPosition(window).x, mousey = sf::Mouse::getPosition(window).y;
if (mousex > 800) mousex = 800; if (mousey > 600) mousey = 600; if (mousex < 0) mousex = 0; if (mousey < 0) mousey = 0;
double angle = atan2(mousey - yPos, mousex - xPos) * (180/3.14159);
ship.setRotation(90+angle);
bullet.setRotation(-90+angle);
Итак, как бы я сравнил скорость пули, чтобы она была такой же, как направление, с которым сталкивается корабль? Чтобы я стрелял пулей, он должен стрелять точно туда, куда смотрит корабль.
То, что я пробовал до сих пор, - это создать вектор расстояния от пули до положения мыши и перемещать пулю по этому вектору расстояния, но, конечно, это мгновенно переместит пулю в положение мыши всего за 1 кадр. Он должен быть похож на нормальную скорость, которая все еще идет в направлении мыши.
Итак, поскольку вы правильно описали, что вам нужно, это нормализованная дельта в направлении угла.
Либо вы используете свойства круга единства, либо вычисляете его как
velocity_x = cos(angle)*speed;
velocity_y = sin(angle)*speed;
или вы используете подход, который вы начали и делаете
diff_x = mousex - xPos;
diff_y = mousey - yPos;
magnitude = sqrt(diff_x*diff_x + diff_y*diff_y);
velocity_x = diff_x/magnitude * speed;
velocity_y = diff_y/magnitude * speed;
velocity_x = cos(angle)*speed; velocity_y = sin(angle)*speed;
или нормализуйте вектор[mousex-xPos,mousey-yPos]
и умножьте его компоненты со скоростью