SFML fps窗口事件轮询的问题

时间:2017-09-09 21:21:37

标签: c++ sfml

我已经开始搞乱C ++和SFML 2.4并且喜欢它到目前为止但是我遇到了令人沮丧的性能问题,甚至试图在屏幕周围移动一个简单的白色矩形。即使使用增量时间,移动精灵也非常紧张并且“无法播放”。它似乎是由窗口事件的轮询引起的。当被移除时,一切都像黄油一样光滑,但事件无法读取(当然)。我正在做什么或者我可以做些什么来解决这个问题?

最小例子:

#include <SFML/Graphics.hpp>

int main(){
    sf::RenderWindow window(sf::VideoMode(500, 500), "Testing");

    sf::Image pixelBuffer;
    pixelBuffer.create(100, 100, sf::Color::White);
    sf::Texture pixelTexture;
    pixelTexture.loadFromImage(pixelBuffer);
    sf::Sprite pixelSprite;
    pixelSprite.setTexture(pixelTexture);

    sf::Clock clock;
    while(window.isOpen()){
        //Poll for events
        sf::Event event;
        while(window.pollEvent(event)){
            if(event.type == sf::Event::Closed){
                window.close();
            }
        }
        //Update the sprite
        float delta = clock.restart().asSeconds();
        pixelSprite.move(sf::Vector2f(50, 50) * delta);
        //Draw the sprite
        window.clear(sf::Color::Black);
        window.draw(pixelSprite);
        window.display();
    }
}

谢谢!

1 个答案:

答案 0 :(得分:0)

您是否有机会连接任何游戏控制器并在Windows下运行此示例?

如果是这样,您很可能会遇到已在SFML代码库中修复的已知错误。只需从official repository下载并编译最新版本(master分支),编译并安装它,问题就不复存在了。

作为替代解决方法,请连接任何与DirectInput兼容的游戏控制器(例如操纵杆或游戏手柄)。