Dans mon jeu XNA en mode fenêtré, lorsque l'utilisateur redimensionne la fenêtre, le jeu cesse de mettre à jour la fenêtre et la dernière image dessinée est étirée et déformée jusqu'à ce que l'utilisateur relâche la souris et que le redimensionnement soit terminé.
Existe-t-il un moyen de faire fonctionner le jeu "normalement", en mettant à jour les cadres et en redessinant l'écran, pendant l'événement de redimensionnement?
Je me rends compte que garder la boucle de rendu en cours pendant le redimensionnement peut ne pas être possible ou recommandé car les ressources gérées par le matériel sont-elles continuellement créées et détruites, mais y a-t-il un moyen d'arrêter l'étirement laid? Idéalement, en laissant le cadre existant non mis à l'échelle en haut à gauche, ou avec un écran noir si ce n'est pas possible.
Réponses:
Il y a au moins 3 messages que vous pouvez suivre.
WM_SIZE
- redimensionnement de la fenêtre, mini / maximisation, commutation plein écran / fenêtre. Vous devez lire dans wParam pour savoir ce qui s'est exactement passé et lParam pour la taille actuelle.WM_ENTERSIZEMOVE
- commencer le redimensionnement de la fenêtre en mode fenêtréWM_EXITSIZEMOVE
- fin de redimensionnement de la fenêtre en mode fenêtréHabituellement, vous ne voudrez pas redimensionner votre application à chaque image entre WM_ENTERSIZEMOVE et WM_EXITSIZEMOVE parce que c'est trop lent et laid. Mais essayez-le, c'est sûrement bien que l'étirement, peut-être que vous l'aimerez =)
la source
System.Windows.Forms.Form.WndProc()
. Lorsque vous travaillez dans XNA, vous n'avez pas d'accès direct à unForm
pour remplacer cette méthode. Bien qu'il soit possible de le faire, ce n'est pas une quantité de travail insignifiante et devrait contourner la conception de XNA.