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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top