Ich schreibe gerade ein Spiel von immenser Kultiviertheit und List, das dich mit Ehrfurcht erfüllen und gewinnen wird - oh, OK, es ist das 15-Puzzle, und ich lerne mich nur mit SDL vertraut.Wie synchronisiert man Seiten-Flips mit vertikalem Rücklauf in einer windowed SDL-Anwendung?
Ich bin im Fenstermodus und SDL_Flip als General-Fall-Seite-Update ausgeführt, da es automatisch auf eine SDL_UpdateRect des vollständigen Fensters im Fenstermodus zugeordnet. Nicht der optimale Ansatz, aber vorausgesetzt, dass dies nur das 15 Puzzle ist ...
Wie auch immer, die Fliesen bewegt sich mit lächerlicher Geschwindigkeit. IOW, SDL_Flip im Fenstermodus enthält keine Synchronisierung mit vertikalen Rückverfolgungen. Ich arbeite in Windows XP ATM, aber ich nehme an, das ist das richtige Verhalten für SDL und wird auch auf anderen Plattformen auftreten.
Die Umstellung auf SDL_UpdateRect ändert offensichtlich nichts. Vermutlich muss ich die Verzögerungslogik in meinem eigenen Code implementieren. Aber ein einfacher Clock-basierter Timer könnte zu Aktualisierungen führen, wenn das Fenster halb gezeichnet wird, was zu sichtbaren Verzerrungen führt (ich vergesse den technischen Namen).
EDIT Dieses Problem ist bekannt als "Tearing".
Also, wie synchronisiere ich in einem Fenstermodus-Spiel in SDL meine Seiten-Flips mit dem vertikalen Rücklauf?
EDIT Ich habe mehrere Ansprüche gesehen, während der Suche nach einer Lösung, dass es unmöglich ist, zu dem vertikalen Rücklauf in einem Fensteranwendungsseite-Flips zu synchronisieren. Zumindest unter Windows ist das einfach falsch - ich habe Spiele geschrieben (mit denen ich Dinge auf einer ähnlichen Ebene wie das 15-Puzzle meine), die das tun. Ich habe mal etwas Zeit damit verbracht, mit Dark Basic und dem Dark GDK zu spielen - sowohl DirectX-basiert als auch beide synchronisierenden Seiten-Flips zum vertikalen Rücklauf im gefensterten Modus.
Akzeptiert, um diese alte Frage zu schließen, aber ich bin noch offen für den Wechsel, wenn eine definitive Antwort erscheint. – Steve314