我已經開始亂搞C++和SFML 2.4並喜歡它,但我已經遇到了一個令人沮喪的性能問題,甚至試圖移動一個簡單的白色矩形周圍的屏幕。即使在使用增量時間時,移動精靈也是非常緊張和「無法玩」的。這似乎是由窗口事件的輪詢造成的。當被移除時,所有事情都像黃油一樣順利,但事件不能被讀取(當然)。我在做什麼或者我可以做什麼來解決這個問題?SFML fps問題與窗口事件輪詢
小例子:
#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();
}
}
謝謝!
你說pollEvents導致fps下降,但你甚至不包括問題中的函數。做一個最小的完整工作示例。而且你可能不想每次迭代重新啓動時鐘。 – Sopel
其實我是這樣做的,如果你看一下run()方法中的代碼片段,並對它調用的方法發表評論。我只是刪除了其他方法,以便更輕鬆地閱讀它。 –
看起來不像問題的根源,發佈一個我可以複製和編譯的最小完整示例 – Sopel