Entwickler-Ecke
Multimedia / Grafik - flickern bei canvas.pixels
geronimo - Fr 06.12.02 14:38
Titel: flickern bei canvas.pixels
also ich hab hier ein programm, das später einmal ca 1000 objekte verwalten soll (autos, die auf einer strasse fahren).
zur zeit laufen nur 6 objekte und es gibt schon probleme...
also ich hab da 2 images, die das strassenbild bilden (2pixel weiss, 36 px grau, 2px weiss , das ganze mal 2). darüber liegt eine paintbox, in die ich jede sekunde 10 mal die neue position eintrage.
wenn ich jetzt die paintbox refreshe, flimmert es extrem. deshalb zeichne ich jedes mal in der farbe der strasse das auto weg :roll: .
wenn es jetzt über den mittelstreifen fährt ist der mittelstreifen also weg.
wo soll ich da ein doublebuffered:=true; anwenden?
mfg geronimo
Nightwalker_Z - Fr 06.12.02 15:31
HiHo
Also .. DoubleBuffered:=True ist schon mal ganz gut (dann flackert es wenigstens nicht mehr).
ABER: :lol:
Wenn du eine Paintbox benutzt um was zu zeichnen und irgendein beliebiges Objekt über deine bereits gezeichneten Komponenten zieht / zeichnest / bewegst / wasauchimmer, verschwindet dein Kunstwerk.
Ist halt nun mal so.
Eine Alternative ist statt ner Paintbox ein Image als Zeichenfläche zu benutzen.
Einige Beispiele:
Quelltext
1:
| Paintbox1.Canvas.Lineto(x,y) |
würdest du jetzt so machen:
Quelltext
1:
| Image1.Picture.Bitmap.Canvas.Lineto(x,y) |
Damit das funktioniert musst du in der Prozedur TForm1.FormCreate
folgende Einträge hinzufügen:
Quelltext
1: 2: 3: 4: 5: 6: 7:
| procedure TForm1.FormCreate(Sender: TObject); var Bitmap: TBitmap; begin Bitmap:=TBitmap.Create; Bitmap.Width:=Image1.Width; Bitmap.Height:=Image1.Height; image1.Picture.Graphic:=Bitmap; |
Dann sollte auch alles funktionieren.
(Aber nicht DoubleBuffered:=True) vergessen
Hoffe ich konnte helfen
Greetz
Nightwalker
Nightwalker_Z - Fr 06.12.02 15:33
Ahso ... nochmal wegen dem Doublebuffered
(hab ich vorhin überlesen)
Quelltext
1: 2: 3: 4:
| procedure TForm1.FormShow(Sender: TObject); begin DoubleBuffered := True; end; |
So dürfte alles funzen :think:
Gruß
Nightwalker_Z
Postbote - Fr 06.12.02 19:12
Je nachdem wie komplex dein Programm wird, würde ich dir folgendes empfehlen : du zeichnest deine Bitmaps mit BitBlt (siehe winapi sdk) oder benutzt DirectDraw.
geronimo - Mo 09.12.02 22:16
Ok Danke! Ich werd jetzt mal das Zeichnen auf ein Image versuchen. 8)
Nightwalker_Z - Di 10.12.02 10:31
Jupp mach das - ich denke damit wird es schon klappen :)
Greetz
Nightwalker_Z
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!