如何在SFML中对角移动对象?

时间:2016-03-17 19:32:05

标签: c++ sfml

所以我可以通过更改y变量来上下移动我的对象。 我可以通过更改x变量来左右移动我的对象。 但是我如何以相同的速度对角移动。 如果我只是做

x += velocity;
y += velocity;

它将移动约1.5倍。

是否有某种方程cossin使对象沿指向的方向移动? 我希望能够使用SFML(Simple Fast Multimedia Library)内置函数setRotation()来改变它的方向。

提前谢谢。

2 个答案:

答案 0 :(得分:4)

在SFML旋转中,对象不会影响它的移动方向。所以你必须自己实现它。

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

对角线移动角度= 45度或(45 * PI)/ 180弧度,取决于您使用的sin / cos库(C / C ++库需要弧度作为参数)。

答案 1 :(得分: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);