AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Flackern beim Aufbau eines Spielfeldes verhindern

Flackern beim Aufbau eines Spielfeldes verhindern

Ein Thema von Jazzman_Marburg · begonnen am 14. Mär 2010 · letzter Beitrag vom 14. Mär 2010
Antwort Antwort
Benutzerbild von Jazzman_Marburg
Jazzman_Marburg

Registriert seit: 2. Aug 2004
359 Beiträge
 
#1

Flackern beim Aufbau eines Spielfeldes verhindern

  Alt 14. Mär 2010, 13:54
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
--- Delphi XE Starter, Windows 8 ---
  Mit Zitat antworten Zitat
Benutzerbild von Jazzman_Marburg
Jazzman_Marburg

Registriert seit: 2. Aug 2004
359 Beiträge
 
#2

Re: Flackern beim Aufbau eines Spielfeldes verhindern

  Alt 14. Mär 2010, 15:43
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
--- Delphi XE Starter, Windows 8 ---
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:52 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