![]() |
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. |
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:
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.
var ch : char;
t : textfile; begin assignfile (t, 'Level.dat'); rewrite (t); repeat write (t, ch); until EOF (t); closefile (t); end; Kannst statt 'char' auch 'integer' oder so nehmen... Ich hoffe, dass war das was gemeint war ;-) devnull |
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 |
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:
Unter der Delphi-Hilfe findet man mehr darüber. Überbegriff war bei mir pos.
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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:39 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