En mi juego XNA en modo ventana, cuando el usuario cambia el tamaño de la ventana, el juego deja de actualizar la ventana y el último cuadro dibujado se estira y distorsiona hasta que el usuario suelta el mouse y se completa el cambio de tamaño.
¿Hay alguna manera de que el juego continúe ejecutándose "normalmente", actualizando marcos y redibujando la pantalla, durante el evento de cambio de tamaño?
Me doy cuenta de que mantener el bucle de renderizado mientras se cambia el tamaño puede no ser posible o recomendado debido a que los recursos administrados por hardware se crean y destruyen continuamente, pero ¿hay alguna forma de detener el feo estiramiento? Lo ideal sería dejar el marco existente sin escala en la esquina superior izquierda, o con una pantalla negra si eso no es posible.
Respuestas:
Hay al menos 3 mensajes que puede rastrear.
WM_SIZE
- cambio de tamaño de ventana, mini / maximización, cambio de pantalla completa / ventana. Deberá leer en wParam para averiguar qué sucedió exactamente y en lParam para el tamaño actual.WM_ENTERSIZEMOVE
- comienza a cambiar el tamaño de la ventana en modo ventanaWM_EXITSIZEMOVE
- finaliza el cambio de tamaño de la ventana en modo ventanaPor lo general, no querrá cambiar el tamaño de su aplicación cada fotograma entre WM_ENTERSIZEMOVE y WM_EXITSIZEMOVE porque es demasiado lento y feo. Pero pruébalo, seguramente es mejor que estirar, tal vez te guste =)
fuente
System.Windows.Forms.Form.WndProc()
. Cuando trabajas en XNA, no tienes acceso directo a aForm
para anular ese método. Si bien es posible hacerlo, no es una cantidad de trabajo trivial y tendría que eludir el diseño de XNA.