SFML でフレームに依存しない動きを実装しようとしていますが、うまく動作しません。以前に SDL でこの問題が発生したとき、(タイトル バーをドラッグして) アプリケーションを移動するたびに Windows がアプリケーションのメイン スレッドを一時停止することを発見しました。ウィンドウをドラッグすると時計が更新されますが、ウィンドウを離すまで動きが描画されないため、問題が発生します。ウィンドウを移動すると、ウィンドウは描画されなくなりますが、時間はまだ増加しています。したがって、ウィンドウから手を離すと、ユニットは、ウィンドウがドラッグされていなかった場合の場所にすぐにジャンプします。
解決策を考えてみたところ、Windows はメイン スレッドを一時停止するだけなので、ゲーム全体を別のスレッドで実行し、main() で起動することだけを検討しましたが、同じ結果が発生するため、うまくいかないようです。結果として得られる非常に低い FPS についても考えましたが、誰かがウィンドウをドラッグしているのか、ゲームが自然にゆっくりと実行されているのかを区別する方法はありません...どちらかの方法が必要です.ウィンドウがメインスレッドを一時停止したり、この問題を防ぐ何かを実行したりするのを防ぎますが、インターネット上で解決策は見つかりませんでした...
問題を示す zip ファイルへのリンクを次に示します。Demo0 と Demo1 はどちらも同じですが、Demo1 が 2 番目のスレッドを使用してプログラムを実行しますが、同じ効果が発生します。両方を実行して、デルタ値がコマンド ラインに出力されるのを確認するだけです。次に、ウィンドウをドラッグして、画面の別の場所に移動します。手を放すと、非常に大きなデルタ値が表示され、ウィンドウを中断していた時間に応じて円が前方にジャンプするはずです。ソースコードはすべて(「src」フォルダーにあります)あるので、人々が正確な問題を理解できることを願っています:http://www.sendspace.com/file/4er8f4