Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Flackern beim Aufbau eines Spielfeldes verhindern (https://www.delphipraxis.net/149106-flackern-beim-aufbau-eines-spielfeldes-verhindern.html)

Jazzman_Marburg 14. Mär 2010 12:54


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:
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;
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.

Danke im voraus
Gruß
Jazzman

Jazzman_Marburg 14. Mär 2010 14:43

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 18:04 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz