Autor |
Beitrag |
luckyluc
      
Beiträge: 103
|
Verfasst: Mo 13.12.10 17:57
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
Einloggen, um Attachments anzusehen!
|
|
Milchbubi
Hält's aus hier
Beiträge: 8
Erhaltene Danke: 2
Win XP, Win 7
Delphi 7 PE, Delphi 10 Pro.
|
Verfasst: Mo 13.12.10 18: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
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 13.12.10 23: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.
|
|
Dude566
      
Beiträge: 1592
Erhaltene Danke: 79
W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
|
Verfasst: Mo 13.12.10 23:40
_________________ Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 14.12.10 00:46
Aber vorsicht: www.delphipraxis.net...kern-von-delphi.html Beitrag 8 ist der entscheidende.
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 14.12.10 00: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.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 14.12.10 01:27
Moment, aber du blittest ja das gesamte Bitmap auf das Fenster. Also, wenn man diesen Code verwendet: www.michael-puff.de/...ffScreenBitmap.shtml
Ich habe das hier noch mal zusammengefasst: www.michael-puff.de/...ubleBuffer-RDP.shtml
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 14.12.10 01: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 
      
Beiträge: 103
|
Verfasst: Di 21.12.10 22: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!
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 21.12.10 22:37
Michael hat sein Beispiel dazu ja schon verlinkt und Dude566 vorher auch schon:
www.michael-puff.de/...ffScreenBitmap.shtml
OnPaint ist das Ereignis der (in diesem Fall) PaintBox, das ausgelöst wird, wenn die PaintBox neugezeichnet werden muss.
|
|
|