2017-09-09 20 views
0

我已經開始亂搞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(); 
    } 
} 

謝謝!

+0

你說pollEvents導致fps下降,但你甚至不包括問題中的函數。做一個最小的完整工作示例。而且你可能不想每次迭代重新啓動時鐘。 – Sopel

+0

其實我是這樣做的,如果你看一下run()方法中的代碼片段,並對它調用的方法發表評論。我只是刪除了其他方法,以便更輕鬆地閱讀它。 –

+0

看起來不像問題的根源,發佈一個我可以複製和編譯的最小完整示例 – Sopel

回答

0

任何機會,你沒有任何遊戲控制器連接,並在Windows下運行這個例子?

如果是這樣,那麼您最有可能患有已在SFML代碼庫中修復的已知錯誤。只需從official repository下載並編譯最新版本(master分支),編譯並安裝它,問題應該消失。

作爲替代解決方法,請連接任何兼容DirectInput的遊戲控制器(例如遊戲杆或遊戲手柄)。

+0

我目前使用的是2.4.2(我從下載頁面下載了它),但我可以嘗試重新編譯它,也許我是在windows下用visual studio運行這個例子。我只是嘗試連接一個遊戲手柄並且口吃持續存在,但在連接兩個遊戲手柄時似乎工作正常。這是一個Windows的東西?謝謝! –

+0

編譯最新版本(主分支)沒有修復它,所以現在我只需插入兩個遊戲手柄作爲臨時修復:/,必須是我特定的操作系統/硬件配置。儘管謝謝您的幫助! –

+0

@AaronShappell真的很奇怪,因爲這不應該發生了。那麼一旦至少有一個遊戲手柄連接,問題就消失了嗎? – Mario