Entwickler-Ecke
Multimedia / Grafik - Flackern wegbekommen
luckyluc - Mo 13.12.10 16:57
Titel: Flackern wegbekommen
Hey!
Ich möchte ein Spiel programmieren, das snake ähnelt. das problem was ich im moment habe, ist, dass die steine die beim programm start zu sehen sind jedoch flackern, d.h sie sollen eigentlich nur einmal erzeugt werden jedoch werden die im moment noch immer wieder neu gezeichnet (was nicht so sein sollte). ich denke diese steinezeichen schleife müsste in formcreate rein, doch dann werden gar keine steine mehr gezeichnet. Hat jmd. eine Idee? Außerdem flackert im hintergrund immer ein rechteckiger kasten, was auch nicht sein sollte.
Danke!
Moderiert von
Martok: Topic aus Sonstiges (Delphi) verschoben am Di 21.12.2010 um 21:48
Milchbubi - Mo 13.12.10 17:19
hallo
Könntest du bitte das ganze Projekt hochladen dann ist es für mich einfacher.
versuche es aber mal mit:
Form1.DoubleBuffered := true;
in der FormCreate prozedur.
jaenicke - Mo 13.12.10 22:26
Das Problem ist, dass du nicht OnPaint der PaintBox benutzt. Dort sollte alles gezeichnet werden. Wenn ein Neuzeichnen notwendig ist, kannst du das mit Invalidate auslösen.
Dafür benutzt du am besten eine Hintergrundbitmap, an der du alle Änderungen machst. Diese kannst du dann in OnPaint einfach auf die PaintBox kopieren.
Das Flackern rührt einfach davon her, dass du einzelne Teile direkt auf der PaintBox neu zeichnest.
jaenicke - Mo 13.12.10 23:55
Es sollte mit BeginPaint bzw. GetUpdateRect aber möglich sein, festzustellen welcher Bereich aktualisiert werden muss. Wenn man dann nur diesen aus der Hintergrundbitmap kopiert (und bei eigenen Updates auch nur den betreffenden), sollte das Problem nicht auftreten (nehme ich an).
Vielleicht probiere ich das auch mal aus, ich hab da ein geeignetes Projekt als Kandidat.
jaenicke - Di 14.12.10 00:34
Ich mache es nicht so, ich kopiere nur den geänderten Ausschnitt.
Allerdings mache ich es bisher so, dass ich zwar mit InvalidateRect arbeite (bei einem eigenen Control allerdings), aber nicht beim Zeichnen die aktuelle Zeichenregion beachte. Ich denke, wenn ich das auch noch mache, ist das trotz OffscreenBitmap auch bei RDP passend.
luckyluc - Di 21.12.10 21:15
@jaenicke:
ich verstehe nicht, wie ich das jetzt umsetzten soll: was ist onpaint? (sorry, aber die delphihilfe gibt mir darüber nicht wirklich aufschluss). und wie soll das kopieren von der hintergrundbitmap in onpaint funktionieren? Hast du da vlt. ein Beispielcode für mich, damit ich das von dir beschriebene in einen quelltext umsetzten kann?
Danke!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 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!