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

How to move objects diagonally in SFML?

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

x += velocity;
y += velocity;

它的移动速度将提高约 1.5 倍。

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

提前致谢。

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

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

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

这里的答案并没有真正向您展示为什么转换如此有用。例如,假设您有一个 Vector2f 表示对象在单个 'tick' 上移动的距离,您可以获得相对于对象旋转的速度。对于复杂的事情,这很可能更方便。

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);