In meinem Fenstermodus XNA-Spiel beendet das Spiel die Aktualisierung des Fensters, wenn der Benutzer die Größe des Fensters ändert, und der zuletzt gezeichnete Frame wird gedehnt und verzerrt, bis der Benutzer die Maus loslässt und die Größenänderung abgeschlossen ist.
Gibt es eine Möglichkeit, das Spiel während des Größenänderungsereignisses "normal" weiterlaufen zu lassen, Frames zu aktualisieren und den Bildschirm neu zu zeichnen?
Mir ist klar, dass es möglicherweise nicht möglich oder empfehlenswert ist, die Render-Schleife während der Größenänderung aufrechtzuerhalten, da Hardware-verwaltete Ressourcen kontinuierlich erstellt und zerstört werden. Gibt es jedoch eine Möglichkeit, das hässliche Dehnen zu stoppen? Idealerweise lassen Sie den vorhandenen Rahmen oben links nicht skaliert oder mit einem schwarzen Bildschirm, wenn dies nicht möglich ist.
Antworten:
Es gibt mindestens 3 Nachrichten, die Sie verfolgen können.
WM_SIZE
- Fenstergrößenänderung, Mini / Maximierung, Vollbild- / Fensterumschaltung. Sie müssen in wParam lesen, um herauszufinden, was genau passiert ist, und in lParam nach der aktuellen Größe suchen.WM_ENTERSIZEMOVE
- Beginnen Sie mit der Fenstergröße im FenstermodusWM_EXITSIZEMOVE
- Fenstergröße im Fenstermodus beendenNormalerweise möchten Sie nicht, dass die Größe Ihrer App in jedem Frame zwischen WM_ENTERSIZEMOVE und WM_EXITSIZEMOVE geändert wird, da dies zu langsam und hässlich ist. Aber probieren Sie es aus, es ist sicherlich schön als zu dehnen, vielleicht wird es Ihnen gefallen =)
quelle
System.Windows.Forms.Form.WndProc()
. Wenn Sie in XNA arbeiten, haben Sie keinen direkten Zugriff auf aForm
, um diese Methode zu überschreiben. Dies ist zwar möglich, aber kein trivialer Arbeitsaufwand und müsste das Design von XNA umgehen.