2017-09-09 13 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を使用しています(私はダウンロードページからダウンロードしました)が、私はおそらくそれを再コンパイルしてみることができ、私は午前中です。ビジュアルスタジオのウィンドウの下でこの例を実行します。私はちょうど1つのゲームパッドを接続しようとしたが、吃音は持続しましたが、2つのゲームパッドが接続されていると正常に動作するようです。これは窓のものですか?ありがとう! –

+0

最新バージョン(マスターブランチ)をコンパイルしても修正されなかったので、一時的な修正として2つのゲームパッドを接続するだけで済むでしょう。/は、私の特定のOS /ハードウェア構成でなければなりません。しかし、助けてくれてありがとう! –

+0

@AaronShappellそれ以上のことは起こらないはずです。少なくとも1つのゲームパッドが接続されると、問題は解消されますか? – Mario