Je fais un billet dessus parceque j'ai eu du mal à trouver une des informations rapidement à ce propos.
C'est quoi le double buffering ?
Un méthode de rendu.
A quoi ça sert ?
A résoudre le problème de clignotement de l'écran lorsqu'on redessine tout l'écran (flickering).
Comment on fait ?
On crée une classe qui hérite de PictureBox et on surcharge les méthodes OnPaint() et OnPaintBackground() :
protected override void OnPaint(PaintEventArgs e)
{
Bitmap buffer = new Bitmap(this.Width, this.Height);
Graphics graphics = Graphics.FromImage(buffer);
Rectangle rect = new Rectangle(0, 0, this.Width, this.Height);
PaintEventArgs arg = new PaintEventArgs(graphics, rect);
//paint in the buffer
PaintEverythingInTheBuffer(arg);
//paint on the screen
e.Graphics.DrawImage(buffer, 0, 0);
//clean
graphics.Dispose();
buffer.Dispose();
}
protected override void OnPaintBackground(PaintEventArgs e)
{
//do nothing
}
Voilà, on peut faire plus simple en évitant de créer un PaintEvenArg et en se contentant du Graphics. On peut aussi remplir le buffer dans une fonction appelé avant l'évènement OnPaint() pour ne faire que e.Graphics.DrawImage(buffer, 0, 0); dans l'évènement OnPaint().
Voilà avec ça, adieu les clignotements !
lundi 31 décembre 2007
Inscription à :
Publier les commentaires (Atom)
1 commentaire:
bonne idée de jeu sur le touch, j'attend la beta...
Enregistrer un commentaire