Einzelnen Beitrag anzeigen

Popov

Registriert seit: 15. Mai 2005
Ort: Köln
2.125 Beiträge
 
Delphi 7 Professional
 
#5

AW: Hintergrundbild erstellen

  Alt 14. Feb 2012, 02:14
Paar Punkte wenn du selbst so etwas wie ein Bild zeichnest:

Zuerst in Create DoubleBuffer auf True setzten, gegen Flackern.

Wenn du direkt auf der Canvas des Formulars oder PaintBox zeichnest:
Du mußt auf OnFormPaint reagieren, d. h. die wird ausgeführt wenn dein Formular ganz, aber auch nur in Teilen neu gezeichnet wird.

Das Arbeiten mit mehreren Images führt zum flackern. Images sind keine Sprites.

Das Einfachste (nicht das Beste) ist mit einer temporären Bitmap zu arbeiten. Du zeichnest zuerst alles auf der Bitmap und dann, wenn alles fertig ist, das Ergebnis auf das Formular. Wenn das nur etwas Einfaches ist, dann reicht es. Wenn du dein Ergebnis z. B. 10 mal in der Sekunde zeichnest, dann kommen die Probleme. Das Ergebnis flackert und, ja nach Bildgröße kommt das Programm mit dem Zeichnen nicht nach.

Etwas besser, aber aufwendiger ist, du erstellst eine Art Clipping-Map. Das habe ich mal gemacht, ist aber schon Jahre her, so dass ich die Details auch nicht weiter weiß. Die Clipping-Map (ich nenne das mal so) ist eine Art Lochmaske die du beim Zeichnen erstellst. Beispiel, du hast ein 50 Pixel großen Ball der sich sich bewegt. Beim letzten Bild war der an der Position 100x100, jetzt ist er an 120x100. Du vermerkst die Umrisse des alten Balles an der Position 100x100 und des neuen Balles an Position 120x100. Parallel dazu zeichnest du den Hintergrund an der alten Position neu und den Ball auf der neuen Position, auf der temporären Bitmap. Wenn das Ergebnis fertig ist, legst du die Clipping-Map über das Formular und zeichnest die temporäre Bitmap.

Welchen Vorteil bringt es, wenn hier mehr gezeichnet wird? Erstens brauchst du nur das neu zeichnen was geändert wurde und Zweites zeichnet das System später nichts außerhalb der "Löcher". Das hat Folgen: Erstens ist es schneller, da nur in den Clipping Bereich gezeichnet wird und Zweitens, noch wichtiger, es flackert weniger.

Leider hatte ich nicht genug Zeit das weiter zu verfolgen, aber auf Canvas ein Game zaubern ist möglich.

Als Anhang eine kleine Demo. Auf einem Formular befinden sich an die 100 Rechtecke, auf 100 Ebenen, paar davon bewegen sich zwischen den Ebenen. Es sieht nicht spektakulär aus, ist aber nach dem oberen Muster mit Clipping-Bereichen gemacht worden. Leider habe ich nur die Exe, finde auf die Schnelle den Code nicht.
Angehängte Dateien
Dateityp: zip CanvasDemo.zip (105,1 KB, 20x aufgerufen)
Popov
Abrakadabra, Embarcadero, dreimal schwarzer Kater...
  Mit Zitat antworten Zitat