私は現在、非常に洗練された狡猾なゲームを書いています。それはあなたを畏敬の念で満たしてくれるでしょう。ああ、それは15パズルで、SDLに慣れているだけです。
私はウィンドウモードで実行しており、ウィンドウモードではウィンドウ全体のSDL_UpdateRectに自動的にマップされるため、一般的なケースのページ更新としてSDL_Flipを使用しています。最適なアプローチではありませんが、これが15パズルにすぎないことを考えると...
とにかく、タイルの動きはばかげた速度で起こっています。ウィンドウモードのIOW、SDL_Flipには、垂直リトレースとの同期は含まれていません。私はWindowsXPATMで作業していますが、これはSDLの正しい動作であり、他のプラットフォームでも発生すると思います。
SDL_UpdateRectの使用に切り替えても、明らかに何も変わりません。おそらく、自分のコードに遅延ロジックを実装する必要があります。ただし、単純なクロックベースのタイマーを使用すると、ウィンドウが半分描画されたときに更新が発生し、目に見える歪みが発生する可能性があります(技術名を忘れています)。
編集 この問題は「ティアリング」として知られています。
つまり、SDLのウィンドウモードゲームで、ページめくりを垂直リトレースと同期するにはどうすればよいですか?
編集 私は、解決策を探しているときに、ウィンドウ化されたアプリケーションでページめくりを垂直リトレースに同期させることが不可能であるといういくつかの主張を見てきました。Windowsでは、少なくとも、これは単に誤りです。私はこれを行うゲーム(つまり、15パズルと同じレベルのものを意味します)を作成しました。私はかつて、DarkBasicとDarkGDKで遊んで時間を無駄にしました。どちらもDirectXベースであり、ウィンドウモードでの垂直リトレースへのページめくりを同期しています。