将矩形重力旋转到最大旋转点

时间:2015-11-29 23:47:14

标签: rotation sfml

下面的代码在按下R时将原点周围的矩形旋转到-90度,按下A时旋转到40度。

但是,我希望它逐渐旋转到-90或40度,即每次按R它会逐渐移动到-90度停止,如果我按A它将会在相反的方向逐渐移动到它停止的40度。

现在它正在工作,但是当我按下R时,矩形会直接跳到-90度位置,当我按下A时,矩形会直接跳到40度位置。

如何更改此行为?

#include <SFML/Graphics.hpp>
int main(){

    sf::RenderWindow window(sf::VideoMode(640, 480), "Use 'q','w','a','s','z' & 'X' to move the are");
    sf::RectangleShape rect(sf::Vector2f(100,10));

    rect.setFillColor(sf::Color::Green);

    rect.setPosition(200, 300);
    rect.setOrigin(20, 20);
    rect.setSize(sf::Vector2f(160, 40));

    while (window.isOpen()){

        sf::Event event;
        while (window.pollEvent(event)){

            if (event.type == sf::Event::Closed)
                window.close();
        }

        if (sf::Keyboard::isKeyPressed(sf::Keyboard::R)){

            rect.setRotation(-90);
        }
        else if (sf::Keyboard::isKeyPressed(sf::Keyboard::A)){
            rect.setRotation(40);
        }

        window.clear();
        window.draw(rect);
        window.display();
    }
}

1 个答案:

答案 0 :(得分:1)

首先,您需要一个变量来确定旋转速度;你说你希望它是~1.0。我们可以使用setRotationrotategetRotation函数来完成剩下的工作:

float velocity = 1.0;
while (window.isOpen())
{
    sf::Event event;
    while (window.pollEvent(event))
    {
        if (event.type == sf::Event::Closed)
            window.close();

        if (sf::Keyboard::isKeyPressed(sf::Keyboard::R))
        {
            if (rect.getRotation() > -90)
                rect.rotate(-velocity);
        }
        if (sf::Keyboard::isKeyPressed(sf::Keyboard::A))
        {
            if (rect.getRotation() < 40)
                rect.rotate(velocity);
        }
    }

    window.clear();
    window.draw(rect);
    window.display();
}

正如您所看到的,rotate函数将矩形旋转您指定的度数。但是setRotation将矩形的旋转设置为立即指定的角度,而不是逐帧旋转矩形。