如何在 SFML 中沿对角线移动对象?
How to move objects diagonally in SFML?
所以我可以通过更改 y
变量上下移动我的对象。
我可以通过更改 x
变量来左右移动我的对象。
但是我如何以相同的速度沿对角线移动。
如果我只是做
x += velocity;
y += velocity;
它的移动速度将提高约 1.5 倍。
是否有某种方程式 cos
和 sin
可以使物体朝它指向的方向移动?
我希望能够使用 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);
所以我可以通过更改 y
变量上下移动我的对象。
我可以通过更改 x
变量来左右移动我的对象。
但是我如何以相同的速度沿对角线移动。
如果我只是做
x += velocity;
y += velocity;
它的移动速度将提高约 1.5 倍。
是否有某种方程式 cos
和 sin
可以使物体朝它指向的方向移动?
我希望能够使用 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);