![]() |
Grafiken performant über Form bewegen
Hi,
ich würde gerne vom Programm gesteuert einige Dinge über das Formular bewegen lassen. Soweit funktioniert das auch, allerdings ruckelt das Programm wie sonst was und frisst ordentlich CPU-Leistung. :( Im Moment mache ich das mit einfachen TImages, die ich über das Formular bewege. Aber es flackert dabei extrem und frisst halt Leistung. Kann mir jemand kurz erklären, wie ich das Flackern wegbekomme (danke, aber DoubleBuffered kenne ich schon, das auf true setzen bewirkt erstmal nichts) und wie das etwas performanter (sprich mit weniger Leistungs-Fraß) geht? Chris |
Re: Grafiken performant über Form bewegen
Ich würde da keine Images nehmen, sondern einzelne Bitmaps, die du dann entsprechend verschoben auf ein Hintergrundbitmap zeichnest, und dieses dann OnPaint des Formulars auf dessen Canvas Zeichnest (BitBlt z.B.). Dann sollte es a) nicht flimmern, und b) evtl. etwas performanter sein.
Und noch was, was Punkt b) betrifft: ![]() |
Re: Grafiken performant über Form bewegen
Hi,
die genannte Bibliothek ist schonmal genau das, was ich suche. :) Aber kannst du deine Erklärung vielleicht mit ein wenig Source erläutern, irgendwie bin ich da noch nicht ganz durchgestiegen, wie du das meinst. :gruebel: Chris |
Re: Grafiken performant über Form bewegen
Im Grunde einfach alles was sich auf dem Formular bewegen soll im Vorfeld auf einem Bitmap zusammenkopieren, und das dann komplett auf's Form zeichnen.
Mal etwas Pseudocode (ich nehme an, dass die zu bewegenden Teile einzeln in Bitmaps vorliegen, und die Graphics32 mitspielt :)):
Delphi-Quellcode:
Noch schneller dürfte es sein, wenn das BackBMP Member der Formklasse ist, so dass du es nicht jedes Mal neu instanziieren musst, sondern nur "Clear"-en.
uses
..., GR32, ...; . . . var Sprites: array of TBitmap32; // mal angenommen für die zu bewegenden Teile... . . . procedure TForm1.OnPaint(...); var BackBMP: TBitmap32; begin BackBMP := TBitmap32.Create; BackBMP.SetSize(Form1.ClientWidth, Form1.ClientHeight); BackBMP.Clear(Color32(Form1.Color)); Sprites[0].DrawTo(BackBMP, PosX1, PosY1); Sprites[1].DrawTo(BackBMP, PosX2, PosY2); . . BackBMP.DrawTo(Form1.Canvas.Handle); BackBMP.Free; end; Hoffe das hilft! Grüzli, Fabian \\edit: Was da u.U. noch viel besser wäre, wäre ein TImage32 im Hintergrund auf deiner Form, und dann mit der "Layers"-Eigenschaft zu arbeiten. Das ist im ersten Moment etwas ungewohnt, aber die Hilfe zur G32 ist da echt nicht übel ;). Das dürfte dann nochmals viiiiel Schneller sein, und im Endeffekt auch komfortabler! \\edit2: @Chistian: Jupp genau das meinte ich mit dem ersten Edit 8) |
Re: Grafiken performant über Form bewegen
Moin Chris,
bei der Graphics 32 ist doch eine Sprite-Demo dabei. Schau Dir die doch mal an. |
Re: Grafiken performant über Form bewegen
Hi,
klasse. :firejump: Die Demos habe ich mir angesehen, aber bei der Sprites-Demo hat wohl mein Gehirn ausgesetzt. Hängt vielleicht mit dem vielen ... Tee und O-Saft zusammen. :mrgreen: Danke euch beiden, werde mir das mal zu Gemüte führen, Chris |
Re: Grafiken performant über Form bewegen
Ich hab das mal ganz einfach mit der BitBlt-Funktion der Winapi gelöst. Die ist sehr schnell, und sehr einfach anzuwenden.
|
Re: Grafiken performant über Form bewegen
Hi,
naja. Ich mache das jetzt mit der G32-Bibliothek. Das andere sieht mir zu anstregend aus. *g* Ich habe mir jetzt die Sprites-Demo angesehen und bei das genaus gemacht, weil in der Demo, allerdings ist die CPU-Belastung bei 100 Layern bei gut 100%. Und angesichts der größe der einzelnen Layer ist das noch relativ wenig. :( Bei der Sprites-Demo ist das aber genauso. Ich meine: zwar wird nichts anderes laufen, während mein Programm läuft, aber das kann schon einige Stunden laufen. Stört das nicht, wenn die CPU dann die ganze Zeit so ausgelastet ist? Chris |
Re: Grafiken performant über Form bewegen
Die sind eigentlich so gebaut, dass sie das locker flockig wegstecken. Wäre ja auch nen Dingen wenn nicht ^^
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:56 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