下面的代码在按下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();
}
}
答案 0 :(得分:1)
首先,您需要一个变量来确定旋转速度;你说你希望它是~1.0。我们可以使用setRotation
,rotate
和getRotation
函数来完成剩下的工作:
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
将矩形的旋转设置为立即指定的角度,而不是逐帧旋转矩形。