Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Das Laden eines Levels dauert zu lange (https://www.delphipraxis.net/14877-das-laden-eines-levels-dauert-zu-lange.html)

ISAS 18. Jan 2004 20:05

Re: Das Laden eines Levels dauert zu lange
 
Wie schaffe ich das dann aber, dass die Zahlen nebeneinander sind?
bzw wie geht das dann zu Laden??

Hab da grad so ein Beispiel vor mir. Ich weiss schon was du meinst.

245323
324554
324532

Das wäre sozusagen ein Bild. 2=Busch, 3=Baum, etc.

devnull 18. Jan 2004 20:15

Re: Das Laden eines Levels dauert zu lange
 
Du liest einfach jedes Zeichen einzeln ein:

Delphi-Quellcode:
var ch : char;
    t : textfile;
begin
  assignfile (t, 'Level.dat');
  reset (t);
  repeat
    read (t, ch);
    case ch of
      1 : ;// Baum
      2 : ;// Stuhl
      ...
    end;
  until EOF (t);
  closefile (t);
end;
Delphi-Quellcode:
var ch : char;
    t : textfile;
begin
  assignfile (t, 'Level.dat');
  rewrite (t);
  repeat
    write (t, ch);
  until EOF (t);
  closefile (t);
end;
Du könntest aber auch, sagen wir 500 Zeichen, in eine Zeile schreiben und diese später komplett einlesen (readln (t, zeile);) und dann mittels Schleife die "Kästchen" ändern/definieren.


Kannst statt 'char' auch 'integer' oder so nehmen...
Ich hoffe, dass war das was gemeint war ;-)


devnull

MyRealName 20. Jan 2004 12:46

Re: Das Laden eines Levels dauert zu lange
 
Meiner Meinung nach solltest Du Dich von Text-Dateien verabschieden, die bringen nichts. Speicher es doch binär.

Nehmen wir mal an, Du möchtest ein Feld 1000*1000 nehmen. das wäre bei Byte-Werten ja man grade mal 1 MB im Speicher. Nun sind 256 Möglichkeiten recht wenig. Also nehmen wir mal ein Word. Das sind 2 MB im Speicher. Dauert nur millisekunden, die einzuladen und Du hast einen direkten Zugriff auf jedes Element. Einfach das entsprechende Quadrat berechnen : Y * Höhe + X. Da Du allerdings mehrere Layer brauchst, machst Du das einfach für jede Ebene, die Du erstellst. 1. Ebene wäre für die Bodentextur (Gras, Straße etc.). 2. Layer für Objecte darauf, die sagen wir mal, dynamisch sind und von der 3. Ebene teils oder ganz verdeckt werden sollen beim zeichnen (z.B. geht Deine Ost-Wand auf dem Bild über die Boden-Textur drüber). Genau in dieser Reihenfolge renderst Du auch. Da hast Du 6 MB Speicher-Verbrauch bei 3 Layer und ist innerhalb einer Sekunde geladen ;-)

Achja, und in jedes Word schreibst Du einfach eine Textur-ID rein. Zum Anzeigen würde ich die Maximal ClientRect-Größe in Tiles nehmen plus je 2 Reihen in jede Richtung. Je nachdem, wohin der Actor geht wird entsprechend nachgeladen und die jeweilige Gegenseite aus dem Speicher entfernt.

LG, MyRealName

ISAS 8. Feb 2004 16:35

Re: Das Laden eines Levels dauert zu lange
 
Das Beispiel mit dem:

00011012
23131232
12312312

usw. kann ich nicht machen, da ich ja mehr als nur 10 Typen habe. Ich habs nun so gemacht, dass er alles nach der Reihe ausliest und erstellt. Das is am besten.

Danke.

Wers wissen will, wie ichs gemacht habe, hier is meine Lösung:

Delphi-Quellcode:
if opendialog1.execute then
Data:=TIniFile.Create(opendialog1.Filename);

sections:=TStringList.Create;
data.readsections(sections);
for i:=0 to (sections.Count-1) do
  begin

secname:=sections.Strings[i];          //secname bekommt zB. 001_001 zugewiesen
typ:=data.readinteger(secname,'typ',0); //der typ wird rausgelesen

  s := Copy(secname, 1, 3);            //s bekommt die erste Zahl von secname und die zwei weiteren zugewiesen
  t := Copy(secname, 5, 3);            //t bekommt die dritte Zahl von secname und die zwei weiteren zugewiesen
Unter der Delphi-Hilfe findet man mehr darüber. Überbegriff war bei mir pos.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:38 Uhr.
Seite 2 von 2     12   

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