![]() |
nur Bereiche neuzeichnen
Liste der Anhänge anzeigen (Anzahl: 1)
Hi!
Zur Performanceverbesserung (2D-Spiel/PaintBox), möchte ich nur Bereiche neuzeichnen. In dem Spiel gibt es mehrere Kugeln, die sich über die PaintBox bewegen. Ich möchte also nur die Kugeln neuzeichnen. Ich zeichne sie auf ein Bitmap (quadratisch, Seitenlänge = Durchmesser der Kugel) im Speicher und kopiere sie dann per BitBlt alle nacheinander auf die PaintBox. Da das Bitmap im Speicher ein Quadrat, ist, kommt es gelegentlich vor, dass die Ecken des Quadrats eine andere Kugel übermalen (siehe Anhang). Wie kann ich das verhindern? Meine Ideen: 1) Gibt es eine Methode wie BitBlt, die stattdessen Kreise kopiert? 2) Direktes Zeichnen auf PaintBox.Canvas, ohne Bitmap im Speicher 3) Sollte das Bitmap im Speicher die Größe der PaintBox haben, dass ich also doch ALLES neuzeichne? EDIT: Anhang vergessen |
Re: nur Bereiche neuzeichnen
So, nun ist auch was im Anhang
|
Re: nur Bereiche neuzeichnen
Beim zeichnen des Hintergrundes könntest du BrushStyle auf bsClear stellen ...
Florian |
Re: nur Bereiche neuzeichnen
Hm. An welcher Stelle und wovon muss ich denn Brush.Style auf bsClear setzen?
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var Bmp: TBitmap; begin // PaintBox1.Canvas.Brush.Style := bsClear; Bmp := TBitmap.Create; try Bmp.SetSize(30, 30); with Bmp.Canvas do begin // Brush.Style := bsClear; Pen.Color := clYellow; Brush.Color := clYellow; Ellipse(0, 0, 30, 30); BitBlt(PaintBox1.Canvas.Handle, 0, 0, 30, 30, Handle, 0, 0, SRCCOPY); Pen.Color := clRed; Brush.Color := clRed; Ellipse(0, 0, 30, 30); BitBlt(PaintBox1.Canvas.Handle, 20, 20, 30, 30, Handle, 0, 0, SRCCOPY); end; finally Bmp.Free; end; end; |
Re: nur Bereiche neuzeichnen
Du verwendest doch ohnehin Classen aus der Unit Graphics.
Dann kannst du auch Bmp.Transparent auf True setzen und mit PaintBox1.Canvas.Draw(x,y,Bmp) die Kugeln zeichnen. Ggf. müsste man auch mal Bmp.TransparentColor auf einen gewünschten Wert setzen. |
Re: nur Bereiche neuzeichnen
Ah, danke Cicaro!! Draw statt BitBlt :thumb:
Macht es denn dann überhaupt Sinn, BitBlt statt Draw zu verwenden, wenn der letzte Parameter sowieso SRCCOPY ist und das gesamte Bitmap im Speicher und nicht nur Teile davon auf ein Canvas kopiert werden sollen? Das ist ja meistens der Fall, wenn BitBlt benutzt wird. Oder ist BitBlt vielleicht schneller als Draw? |
Re: nur Bereiche neuzeichnen
Arghh, Draw selbst ist zwar nur minimal langsamer als BitBlt, aber Transparent ist unerträglich. Bei einem 50x50 Bitmap dauert das ganze allein durch Transparent 200 (!!!) mal so lange.
Hat sonst noch jemand ne Idee? |
Re: nur Bereiche neuzeichnen
try finally wegnehmen das ist nur zeitverschwendung.
|
Re: nur Bereiche neuzeichnen
Zitat:
|
Re: nur Bereiche neuzeichnen
nicht da wo es auf Geschwindigkeit ankommt
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz