除非按下键/鼠标,否则SFML窗口不会更新

时间:2016-01-12 18:41:50

标签: c++11 window sfml

我正在使用SMFL 2.3.2

我的代码绘制一个正方形,并添加一个Rotate(int degrees)函数,该函数在每次游戏循环执行时旋转方形。

问题是只有当我将鼠标悬停在窗口上或者按住某个键时动画才会发生。

我认为这是由于某些视频卡设置/驱动程序而发生的,因为它在我工作时使用的PC上正常工作。

我的笔记本电脑运行INTEL HD Graphics 4000卡。

以下是我使用的代码:

W = sparse(w1(:,1),w1(:,2),1,n,n);

欢迎任何建议!

感谢您的关注。

1 个答案:

答案 0 :(得分:1)

上面代码的问题是,只有在事件队列中有事件时才会旋转多边形。

因此,当您将鼠标悬停在窗口上方时,可以使用鼠标悬停事件,window.pollEvent(event)返回true并调用polygon.rotate(0.4)

请参阅SFML doc了解详情

如果您将polygon.rotate(0.4)移出while (window.pollEvent(event)),我猜您的行为将会获得。

// code snip from above
while (window.isOpen())
{
    sf::Event event;

    //check for events
    while (window.pollEvent(event))
    {           
        switch (event.type)
        {           

        case sf::Event::Closed:       //check for CLOSED event
            window.close();
            break;              

        }
        // polygon.rotate(0.4);  Moved this out of the while loop
    }

    polygon.rotate(0.4);   // rotate in each game loop

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

希望这有帮助!