(
English version) Für Panzerkampf muss ich ja die Panzer und alles zeichnen. Da Windows Forms grundsätzlich mal alles löscht und dann neu zeichnet, kann es zu starkem Flackern führen. Um das zu verhindern, lasse ich im Hintergrund immer alles in ein Bitmap zeichnen und zeichne das dann auf die aktuelle Ebene - welche ich nicht lösche. Dadurch ist das Problem mit dem Flackern komplett behoben. Hier der Code dazu:
void drawDoubleBufBmp()
{
Bitmap localBitmap = new Bitmap(settings.SizeX, settings.SizeY);
using (Graphics gx = Graphics.FromImage(localBitmap))
{
gx.DrawDrawString("Panz.....");
}
lock (BmpLock)
{
doubleBufBmp = localBitmap;
}
}
private Bitmap doubleBufBmp = new Bitmap(
settings.SizeX, settings.SizeY
);
private object BmpLock = new object();
protected override void OnPaint(PaintEventArgs e)
{
lock (BmpLock)
{
g.DrawImage(doubleBufBmp, 0, 0);
}
}
protected override void OnPaintBackground(PaintEventArgs e)
{}
OnPaintBackground
habe ich einfach überschrieben, dies hat zu dem Flackern geführt. In der
OnPaint
Funktion male ich dann einfach das fertige
doubleBufBmp
in das Fenster rein.
drawDoubleBufBmp()
wird bei mir von einem Thread alle 10 Millisekunden aufgerufen, welcher danach
this.Invalidate();
aufruft, was dafür sorgt, dass die
OnPaint
-Funktion aufgerufen wird.
Keine Kommentare:
Kommentar veröffentlichen