SFML 形状无限旋转

SFML shape rotates infinitely

本文关键字:旋转 无限 SFML      更新时间:2023-10-16

我正在制作一个围绕图形移动的机器人手臂,但是当我尝试用键盘旋转形状时,它会无限旋转:我希望它只在我按向右箭头时旋转一次。我该如何解决这个问题?

Transform transform;    
while (window.isOpen())
{
Event event;
while (window.pollEvent(event))
{
if (event.type == Event::Closed)
window.close();
}
if (event.type == Event::KeyPressed)
{
switch (event.key.code)
{
case Keyboard::Right:
ang += 1;
}
}
window.clear(Color::White);
window.draw(braccio, transform);
transform.rotate(ang, WIDTH / 2, HEIGHT / 2);
window.draw(assi);
window.display();
}

现在,这一行

transform.rotate(ang, WIDTH / 2, HEIGHT / 2);

在程序的每一帧上调用,因为它位于不断运行的主循环中。如果希望它仅在游戏检测到某些输入时发生,请将其放入事件轮询中,如下所示:

while (window.pollEvent(event))
{
// Do your event handling in here, input, etc.
if (event.type == Event::Closed)
window.close();
// This event case should also be inside here.
if (event.type == Event::KeyPressed)
{
switch (event.key.code)
{
case Keyboard::Right:
transform.rotate(ang, WIDTH / 2, HEIGHT / 2); 
break;
}
}
}

否则,您的手臂将继续无限期地旋转。

编辑:感谢@alseether指出Transform::rotate函数将角度添加到形状的当前旋转中。所以每次递增ang都会逐渐让形状旋转得越来越快......如果您不希望发生这种情况,只需将ang设置为常量值,它将以恒定速率旋转立方体。