私は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