Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Mehrere Bilder in den RAM laden - Array, ImageList oder was? (https://www.delphipraxis.net/47518-mehrere-bilder-den-ram-laden-array-imagelist-oder.html)

Master_RC 12. Jun 2005 12:51


Mehrere Bilder in den RAM laden - Array, ImageList oder was?
 
hi leutz!

Eine ganz kleine Frage, die mich aber schon die ganze Zeit nervt und ich find einfach keine Lösung...

Und zwar:
Ich möchte, dass die ganzen Tilesets einer Map meines Spiels am Anfang in einen Array geladen werden, damit sie nicht immer von der Festplatten geholt werden.
(Bitte sagen, falls ein Array falsch ist!)

Mein Problem:
Jetzt möchte ich es so machen, dass der Array nicht immer gleich is, also die Bilder werden immer dynamisch geladen - alle aus einem/mehreren Verzeichnis/sen ausgelsen und geladen.

So...
Das Array-Element sollte jetzt einen Namen haben + dem Bild (32x32px groß)

in PHP wärs ja einfach: $array['elementname'] = ...

nur in Delphi... mmh...
Hab schon probiert:
Delphi-Quellcode:
type
   record = TTile
    Name: string;
    Bild: TBitmap;
   end;
und einfach nur
Delphi-Quellcode:
maptiles: array of TBitmap
abba keins funzt so richtig, weil ich ja immer maptiles[X] machen muss (fettgedrucktes)...

Ich wär also gerne für Lösungen offen ;)

Pr0g 12. Jun 2005 13:22

Re: Mehrere Bilder in den RAM laden - Array, ImageList oder
 
Wenn du das Record hast müsstest du ja auch schreiben:
Delphi-Quellcode:
maptiles: array of TTile;
Du könntest auch eine TList nehmen, um die Tiles zu verwalten.

MfG Pr0g

Khabarakh 12. Jun 2005 13:34

Re: Mehrere Bilder in den RAM laden - Array, ImageList oder
 
Lustig, genau das Gleiche hab ich vor kurzem auch gebraucht. Hier mal mein Code, jedes Bitmap hat einen zugehörigen String:

[Quellcode entfernt, siehe unten]

Den Code kannst du sicher für dich anpassen, LoadGraphicRessources musst du natürlich selbst implementieren.

Master_RC 12. Jun 2005 13:37

Re: Mehrere Bilder in den RAM laden - Array, ImageList oder
 
schon klar das mit den Array

mein gezeigtes Array sollte ja dann auch aus "TBitmaps" bstehen, was ich jedoch voll doof finde...

bitt egebt mir zu euren lösungen auch beispiele, weil bei mir NIX funzt :(

Khabarakh 12. Jun 2005 13:52

Re: Mehrere Bilder in den RAM laden - Array, ImageList oder
 
Nagut, hier noch der Rest: Ich verwende eine globale Variable, STOP, bitte nicht hauen, das ist auch die einzige in allen 10 Units und einfach schnell und unkompliziert :wink: .
Delphi-Quellcode:
type
  TBitmapCollection = class
  private
    FBitmapList: TObjectList;
    FNameList: TStringList;
    function GetBitmap(AName: string): TBitmap32;
    procedure LoadGraphicRessources;
  public
    constructor Create;
    destructor Destroy; override;

    procedure Add(ABit: TBitmap32; AName: string);
    function AddNew(AName: string): TBitmap32;

    property Bitmap[AName: string]: TBitmap32 read GetBitmap; default;
  end;

var
  BitmapCollection: TBitmapCollection;

implementation

{ TBitmapCollection }

function TBitmapCollection.GetBitmap(AName: string): TBitmap32;
begin
  Result := TBitmap32(FBitmapList.Items[FNameList.IndexOf(AName)]);
end;

procedure TBitmapCollection.Add(ABit: TBitmap32; AName: string);
begin
  FBitmapList.Add(ABit);
  FNameList.Add(AName);
end;

function TBitmapCollection.AddNew(AName: string): TBitmap32;
begin
  Result := TBitmap32.Create;
  Add(Result, AName);
end;

destructor TBitmapCollection.Destroy;
begin
  FBitmapList.Free;
  FNameList.Free;
  inherited;
end;

constructor TBitmapCollection.Create;
begin
  inherited;
  FBitmapList := TObjectList.Create;
  FNameList := TStringList.Create;
  LoadGraphicRessources;
end;

procedure TBitmapCollection.LoadGraphicRessources;
var
  Stream: TFileStream;
  Alpha: Boolean;
begin
  try
    Stream := TFileStream.Create('Graphics.prr', fmOpenRead);

    LoadPNGintoBitmap32(AddNew('Hugo'), Stream, Alpha);
    LoadPNGintoBitmap32(AddNew('Helmut'), Stream, Alpha);
    LoadPNGintoBitmap32(AddNew('Hannes'), Stream, Alpha);
    LoadPNGintoBitmap32(AddNew('Hannah'), Stream, Alpha);
  finally
    Stream.Free;
  end;
end;

initialization

  BitmapCollection := TBitmapCollection.Create;

finalization

  BitmapCollection.Free;
end.

Master_RC 12. Jun 2005 14:30

Re: Mehrere Bilder in den RAM laden - Array, ImageList oder
 
kewl, THX! :thumb:

ich werds mal ausprobieren!


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:54 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