Le contrôle manuel lors de redessiner l'écran
Question
Je suis en train de faire un moteur de roguelike tour par tour chose pour XNA. Je portage essentiellement le jeu au-dessus de l'œuvre précédente, je n'utilisant une bibliothèque de base roguelike SDL appelle libtcod. Comment puis-je modifier la chose du modèle de base XNA pour rendre le jeu pas redessiner l'écran chaque image, mais, au contraire, quand je veux?
La solution
La méthode correcte pour ce faire est d'appeler GraphicsDevice.Present()
chaque fois que vous voulez dessiner le tampon de retour sur l'écran.
Maintenant, la difficulté est que la classe Game
appelle automatiquement présent pour vous (en particulier dans Game.EndDraw
), ce qui est quelque chose que vous ne voulez pas faire. Heureusement Game
fournit un certain nombre de façons de prévenir le présent d'être appelé:
La meilleure façon serait bafouée BeginDraw
et l'ont return false pour empêcher un cadre d'être aspirés (y compris la prévention Draw
et EndDraw
d'être appelé), comme suit:
protected override bool BeginDraw()
{
if(readyToDraw)
return base.BeginDraw();
else
return false;
}
Les autres alternatives doivent appeler Game.SuppressDraw
ou à passer outre EndDraw
telle qu'elle ne remet pas base.EndDraw()
jusqu'à ce que vous êtes prêt à avoir une image affichée à l'écran.
Personnellement, je voudrais simplement dessiner toutes les images.
Autres conseils
Vous n'avez pas besoin d'hériter de la classe du jeu, il est tout à fait facultative. Vous pouvez écrire votre propre classe qui redessine l'écran seulement quand vous voulez. Il y a un code utile dans la classe, donc vous pouvez utiliser réflecteur pour copier le code à partir de là, puis changer sa logique.