SFML FPS访问窗口事件的问题

SFML fps problems with window event polling

本文关键字:问题 事件 窗口 FPS 访问 SFML      更新时间:2023-10-16

我已经开始与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();
    }
}

谢谢!

您没有连接任何游戏控制器的机会,并且在Windows下运行此示例?

如果是这样,您很可能患有SFML代码存储库中已知的错误。只需从官方存储库中下载并编译最新版本(master分支),请编译和安装,问题应消失。

作为替代方法,将与DirectInput兼容的任何游戏控制器(例如操纵杆或GamePad)。