AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Das Laden eines Levels dauert zu lange
Thema durchsuchen
Ansicht
Themen-Optionen

Das Laden eines Levels dauert zu lange

Ein Thema von ISAS · begonnen am 17. Jan 2004 · letzter Beitrag vom 8. Feb 2004
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von ISAS
ISAS

Registriert seit: 24. Sep 2003
Ort: Vietnam
205 Beiträge
 
Delphi 4 Standard
 
#11

Re: Das Laden eines Levels dauert zu lange

  Alt 18. Jan 2004, 20:05
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.
Signatur wurde auf Wunsch geändert. Deswegen einfach hier drauf klicken-> www.geggi.at.gg
  Mit Zitat antworten Zitat
Benutzerbild von devnull
devnull

Registriert seit: 5. Okt 2003
362 Beiträge
 
Delphi 7 Personal
 
#12

Re: Das Laden eines Levels dauert zu lange

  Alt 18. Jan 2004, 20:15
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
-- Never change a running system --
  Mit Zitat antworten Zitat
Benutzerbild von MyRealName
MyRealName

Registriert seit: 19. Okt 2003
Ort: Heilbronn
673 Beiträge
 
Delphi 10.4 Sydney
 
#13

Re: Das Laden eines Levels dauert zu lange

  Alt 20. Jan 2004, 12:46
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
  Mit Zitat antworten Zitat
Benutzerbild von ISAS
ISAS

Registriert seit: 24. Sep 2003
Ort: Vietnam
205 Beiträge
 
Delphi 4 Standard
 
#14

Re: Das Laden eines Levels dauert zu lange

  Alt 8. Feb 2004, 16:35
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.
Signatur wurde auf Wunsch geändert. Deswegen einfach hier drauf klicken-> www.geggi.at.gg
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:45 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