![]() |
Memory-Spiel OOP
Hallo Gemeinde,
mich plagt gerade folgendes Problem: Ich schreibe ein Memory-Spiel, und dazu habe ich eine Klasse TSpielKarte und eine Container-Klasse, die die Verwaltung der Karten übernimmt und so das Spielfeld als Objekt darstellt (TSpielfeld). Nun möchte ich, dass jede Karte ein Rückenbild anzeigt (beim Klicken dann das Bild dessen Zwilling ja gesucht werden soll). Dazu überreiche ich im CREATE des Spielfeldes eine ImageList, die alle Bilder enthält. Das Spielfeld initialisiert (created) nun alle benötigten Spielkarten -- und soll z.B. das erste Bild in der ImageListe als Rücken-Bild für alls Spielkarten verwenden. Der Spielkarten-Konstruktor sieht so aus:
Delphi-Quellcode:
Die Initialisierung der Spielkarten erfolgt der Klasse Spielfeld etwa so:
constructor TSpielKarte.Create(Owner: TComponent);
begin inherited Create(Owner); Self.OnClick := Click; FImage := TBitmap.create; FImage.Width := 100; FImage.Height := 100; end;
Delphi-Quellcode:
Nun sehe ich aber kein "RueckBild" auf der Karte. D.h. ich habe irgendwas mit dem Card.FImage vermurkst. Nur was?
RueckBild := TBitmap.Create;
FBilderliste.GetBitmap(3, RueckBild); for i := 0 to FCounTSpielKartes - 1 do begin Card := TSpielKarte.Create(nil); Card.Parent := FParent; Card.Height := 102; Card.Width := 102; Card.FImage := RueckBild; ... Ich dachte zunächst, dass FImage ein Parent bräuchte -- ist aber wohl Unsinn. Jede Spielkarte soll halt die Möglichkeit haben ein Bild vom Typ TBitmap anzuzeigen. Da ich später vielleicht auch Text auf der Spielkarte anzeigen wollte, habe ich mich dagegen entschieden, einfach 20 TBitmaps als Spielkarten zu verwenden. Dankbar für jede Idee/Kommentar. Gruß Jazzman |
Re: Memory-Spiel OOP
Du erzeugst Dir da aber ein Speicherleck. Wie ist es so?
Delphi-Quellcode:
Card.FImage.Assign(RueckBild);
|
Re: Memory-Spiel OOP
Hallo!
Zitat:
Ist denn der Rest ok? Ich habe gerade überprüft, ob die übergebene ImageList (mit Bildchen gefüllt) im Spielfeld auch ankommt: Ja.
Delphi-Quellcode:
Irgendwo ist da der Wurm drin...
constructor TSpielFeld.Create(...; BilderListe: TImageList);
begin inherited Create; Randomize; FBilderliste := BilderListe; // FBilderliste.Count = 20. Also war die Übergabe sowiet ok IniTSpielFeld; ... Danke & Gruß Jazzman |
Re: Memory-Spiel OOP
Wo malst du FImage den auf die "Karte"?
|
Re: Memory-Spiel OOP
Zitat:
Delphi-Quellcode:
Jazzman
// SpielFeld wird created und danach werden die Spielkarten erzeugt...
RueckBild := TBitmap.Create; FBilderliste.GetBitmap(3, RueckBild); for i := 0 to FCounTSpielKartes - 1 do begin Card := TSpielKarte.Create(nil); Card.Parent := FParent; Card.Height := 102; Card.Width := 102; Card.FImage := RueckBild; // Hier übergebe ich ein Bitmap an das FImage, das war es. ... |
Re: Memory-Spiel OOP
ja, das sehe ich. aber dann ist das ja lange noch nicht sichtbar. Es hängt bisher nur als Variable in deinem Objekt..
|
Re: Memory-Spiel OOP
Zitat:
Delphi-Quellcode:
(Gleiche Stelle wie oben).
Card.FImage := RueckBild;
Card.Canvas.Draw(0, 0, Card.FImage); Aber weder sehe ich nun etwas, noch macht "Card.Canvas.Draw(0, 0, Card.FImage);" irgendwie einen Sinn auf mich. Das FImage hat ja kein Parent, also dachte ich, wenn ich dem FImage ein Bitmap übergebe, würde es automatisch gezeigt... Bin verwirrt. Gruß Jazzman |
Re: Memory-Spiel OOP
Eine Bitmap selber hat keinen Parent. Es ist ja "nur" ein Bild. Um das Bild anzuzeigen musst du entweder direkt auf dem Canvas machen oder benutzt ein "TImage". Dies kann auch Bitmaps anzeigen.
|
Re: Memory-Spiel OOP
Jepp -- das war wirklich dumm :oops:
Vielen Dank! Schönen Abend! Jazzman |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:12 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