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

How to move objects diagonally in SFML?

本文关键字:对角线 移动 对象 SFML      更新时间:2023-10-16

所以我可以通过更改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 弧度,具体取决于您使用的正弦/余弦库(C/C++ 库需要弧度作为参数)。

这里的答案并没有真正告诉你为什么转换如此有用。例如,假设您有一个表示对象在单个"刻度"上移动的距离的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);