![]() |
Flackern beim Aufbau eines Spielfeldes verhindern
Hallo Gemeinde!
Ich schon wieder... Ich bastle (noch immer) an einem kleinen Memory-Game. Soweit funktionert auch alles bestens -- nun habe ich aber bei genauern Hinsehen entdeckt, dass wenn ich das Spielfeld (6 x 6 Karten -- Rückseite ist mit einem einhetlichem BMP versehen) erstmalig aufbaue, es doch mächtig flackert. D.h. ich gebe die Karten Spaltenweise aus und dabei flackern die bereits gezeichneten Karten umsomehr je mehr Karten sichtbar werden. Ich habe es mal mit "Doublebuffered := TRUE" für jede Karte versucht -- und da wurde es nur noch schlimmer. Hier ein Auszug aus der Container-Klasse, die alle Spielkarten mit den Bildern versieht, und am Anfang auf dem Monitor zeichnet:
Delphi-Quellcode:
Habt ihr eine Idee, wie man das eleganter, d.h. ohne Flackern hinbekommt? D.h. alle Spielkarten auf einmal darstellt, statt wie hier, zwar recht schnell, aber doch eben sequentiell -- wodruch der Flacker-Effekt vermutlich auch entsteht.
PROCEDURE TSpielFeld.InitSpielFeld;
... BEGIN Bild := TBitmap.CREATE; FOR i := 0 to FAnzSpielkarten - 1 DO BEGIN Karte := TSpielkarte.CREATE(NIL); Karte.Init(FParent, FKartenKantenLaenge); ... // X-Y-Pos für jede Karte bestimmen Bild.Assign(nil); FBilderliste.GetBitmap(0, Bild); Karte.FRueckBild.Assign(Bild); // Jede Spielkarte mit einem einheitlichem "Rückenbild" versehen Karte.FImage.Picture.Bitmap.Assign(Bild); Bild.Assign(nil); // Das Image jeder Spielkarte zeigt das entsp. BMP an // Am Anfang ist das nun mal das "Rückenbild" ... // Den Werte jeder Karte bestimmen FBilderliste.GetBitmap(Karte.Wert, Bild); Karte.FSpielBild.Assign(Bild); // Jede Spielkarte mit einem "SpielBild" versehen Bild.Assign(nil); Add(Karte); END;// FOR i := 0 to FAnzSpielkarten Bild.FREE; END; Danke im voraus Gruß Jazzman |
Re: Flackern beim Aufbau eines Spielfeldes verhindern
Hat sich erledigt!
Ich setze alle Spielkarten beim Erzeugen auf Visible:= FALSE, und außerdem das übergeordnete Panel auf DoubleBuffered. Wenns losgeht, einfach per Loop alles Spielkarten auf Visible := TRUE. Dennoch Dankeschön & Gruß Jazzman |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:50 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