Gå til innhold

Anbefalte innlegg

Driver og lager et rollespill i Delphi, og jobber med grafikkmotoren. Bruker DirectX seff. Men uansett, det er ikke poenget. Jeg skal ha maps, som består av tiles som er så og så store. Så det blir nesten som et rutenett, f. eks:

 

[0, 0][1, 0][2, 0][3, 0]

[0, 1][1, 1][2, 1][3, 1]

[0, 2][1, 2][2, 2][3, 2]

[0, 3][1, 3][2, 3][3, 3]

 

Dette ser egentlig sånn ut:

 

TMap: record
 Tile: array of array of TTile;
end;

 

Mapsene må selvfølgelig være inni en fil. Jeg vil så klart åpne for forskjellig størrelse på mapsene, men jeg vil liksom ikke lagre mer data enn jeg trenger på grunn av tomme felt i et statisk array. Så et dynamisk array ville vært toppen, men problemet er at jeg ikke kan bruke dynamiske arrays i typede filer, ergo kan jeg ikke lagre recorden min med mappet i :(

 

Går ut ifra at utypede filer er veien å gå. Så, er det noen måte jeg kan lagre et slikt dynamisk array som binary? Trenger en måte som gjør det enkelt å lagre til og lese fra en slik fil. Noen forslag?

Lenke til kommentar
Videoannonse
Annonse

Jeg ville ha brukt en TFileStream tror jeg. Følgende (utestede) kode skal kunne lagre et kart. Kartet trenger ikke være firkantet:

 

  fs := TFileStream.Create(...);
 try
   x := length(map);
   fs.Write(x, sizeOf(x));
   for i := low(map) to high(map) do
   begin
     y := length(map[i]);
     fs.Write(x, sizeOf(x));
     for j := low(map[i]) to high(map[i]) do
     begin
       fs.Write(map[i, j], sizeOf(map[i, j]));
     end;
   end;
 finally
   fs.free;
 end;

 

-Vegar

Lenke til kommentar
  • 2 uker senere...

Hvis du arver TMap fra TComponent, kan du inkludere masse rart, for eksempel TCollection, i Published properties. Når du da kjører Map1.SaveToFile (metode av TComponent), sørger Delphi's streaming system for å lagre innholdet - altså du slipper å tenke på hvordan data lagres, du kan konsentrere deg på hva som skal ligge i data.

 

TCollection er også en type dynamisk array.

Lenke til kommentar
  • 4 uker senere...

Hvorfor ikke gjøre noe ala:

 

type
 TMap = class
 private    
   Fx: Integer;
   Fy: Integer;
 protected
   constructor Create(X, Y: Integer);
 public
   property X: Integer read Fx write Fx;
   property Y: Integer read Fy write Fy;
 end;

var
 Maps: TList;

constructor TMap.Create(X, Y: Integer);
begin

 ...

end;

begin
 Maps:= TList.Create(nil);
 Maps.Add(TMap.Create(X,Y);

 ...
 
end;

 

Nå har jeg ikke Delphi installert, men som du ser prøver jeg å vise til objekter istedenfor å lage dynamiske tabeller som er vanskelige å holde kontroll på.

 

---

 

/*pF med forbehold om syntax og medlemsfeil

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...