2010-11-09 4 views
1

Je travaille actuellement sur un éditeur de niveau pour XNA qui est construit en combinant Windows Forms et XNA. J'utilise des trucs de l'exemple sur App Hub link text, mais j'ai apporté quelques modifications, donc j'ai une classe ViewportController qui gère tous les contrôles viewport, au lieu que le formulaire les gère directement. Le problème est que lorsque j'ai besoin de mettre à jour la méthode Draw, je dois secouer la fenêtre. Quelqu'un sait comment résoudre ce problème, de sorte que le Draw sera mis à jour en temps réel?Windows Forms et XNA - Draw n'est pas temps réel

Répondre

2

Vous ne savez pas ce que peut être un ViewportController. Toutefois, la méthode Draw() est déclenchée par une demande de peinture Windows. Cela exécute la méthode Control.OnPaint(), il existe un remplacement dans la classe GraphicsDeviceControl qui provoque l'exécution de Draw().

L'échantillon SpinningTriangleControl montre comment vous obtiendrez un contrôle de se redessiner à plusieurs reprises, ce que vous devez obtenir animé:

 // Hook the idle event to constantly redraw our animation. 
     Application.Idle += delegate { Invalidate(); }; 

Notez l'appel de la méthode Control.Invalidate(), qui est ce que la suite provoque l'exécution de la méthode OnPaint(). L'utilisation de l'événement Idle garantit que cela est fait encore et encore, mais seulement si le thread principal n'est pas occupé avec quoi que ce soit. Cela n'est pas nécessaire pour les contrôles qui affichent uniquement du contenu statique, comme l'exemple SpriteFontControl. Une autre façon de le faire est d'utiliser un Timer avec un Intervalle court, son gestionnaire d'événement Tick peut appeler Invalidate().

+0

Merci! Je suppose que j'ai raté cette partie :-) – Basic