2016-03-17 20 views
0

Поэтому я могу перемещать объект вниз и вверх, изменяя переменную y. Я могу перемещать свой объект влево и вправо, изменяя переменную x. Но как я могу двигаться по диагонали с одинаковой скоростью. Если я вобщеКак перемещать объекты по диагонали в SFML?

x += velocity; 
y += velocity; 

он будет двигаться примерно в 1,5 раза быстрее.

Есть ли какое-то уравнение с cos и sin, чтобы объект перемещался в направлении, на которое он направлен? Я хотел бы иметь возможность изменить его направление с помощью SFML(Simple Fast Multimedia Library) встроенной функции setRotation().

Заранее спасибо.

+0

Это не относится к SFML. Это основная декартова геометрия, которую вы должны изучить, если заботиться о графике! –

ответ

3

В SFML вращающийся объект не будет влиять на направление движения. Поэтому вы должны реализовать его самостоятельно.

x+=vel*sin(angle) 
y+=vel*cos(angle) 

Для диагонали угла движущегося = 45 градусов или (45 * ПИ)/180 радиан в зависимости, которые грех/соз библиотеки используется (/ C++ библиотеки C требует радиан в качестве аргумента).

+0

Формула правильная, но правильнее сказать, что формула вычисляет составляющую вектора скорости x и y. – alangab

0

Ответ здесь не показывает вам, почему преобразования так чертовски полезны. Например, если у вас есть Vector2f, который представляет собой расстояние, на которое объект перемещается по одному «тику», вы можете получить скорость относительно вращения объекта. Это, скорее всего, более удобно для сложных вещей.

sf::Transform rotation; 
rotation.setRotation(getRotation()); 
sf::Vector2f velocity;//This could be (1,0) or (0,1) (or anything else) 
setPosition(getPosition()+rotation.transformPoint(velocity); 
Смежные вопросы