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 1 von 2  1 2      
Benutzerbild von ISAS
ISAS

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

Das Laden eines Levels dauert zu lange

  Alt 17. Jan 2004, 12:21
Das Laden eines Levels dauert zu lange

Habe die Datei angehängt. Dann kann man gleich mitschauen, was ich meine. (Delphi 4)

Habe einen Leveleditor gebaut, der das Level dann als Textdatei abspeichert. Er schreibt nur das in die Textdatei, was man auch wirklich sieht. Hintergrund oder so wird nicht reingeschrieben. Nach Fertigstellung einer Probemap speichere ich das Level. Es funktioniert alles.

Nun öffne ich mein Spiel und das Fenster, mit dem man die Textdatei öffnen kann, öffnet sich.
Wenn man nun die Datei heruntergeladen hat, erkennt man sofort, was mein Problem ist.
Für die, die die Datei nicht heruntergeladen haben, versuche ich das Problem zu erläutern :

http://www.mpogd.com/images/games/420/1.jpg

So ca. ist das Level aufgebaut. Man ist in der Mitte fixiert und die "Umgebung" bewegt sich. Das ganze map besteht aus "Kästchen", die eine Grösse von 32x32 haben. Für eine map von 50x50 erkennt man noch nicht richtig ein Problem, doch ist die map 200x200 gross, dauert das laden schon ziemlich lange, obwohl ich einen sehr neuen Computer habe. Bei 1000x1000 gibt es keine chance mehr, das level zu laden. Doch das endgültige Spiel sollte dann um die 10000x10000 Kästchen besitzen (Ob das wirklich so gross werden wird, weiss ich nicht, aber es sollte bis zu dieser Grösse noch ruckelfrei gehen).

Das Problem liegt am maxx und maxy.
Dort wird die Anzahl der Kästchen eingetragen (zB. 200x200 (siehe oben)). Wenn ich nun das level mit 2 for-schleifen lade, dann sieht das so aus:


Code:
for i:=0 to Maxx do
begin
 for j:=0 to Maxy do
  begin
Dort wird dann die x und y Position des Busches, der Strasse, etc. festgelegt. Um so grösser maxx und maxy sind, umso länger dauerts beim laden und umso ruckeliger geht es
Ich weiss nicht, wie ich das erklären bzw. besser erklären kann. Am Besten ist es, die Datei donwloaden und selber nachschaun.

Einfach nur dort nachschaun, wo i,j,maxx und maxy. Dort muss es irgendwo liegen.

PS: Man muss die mitgelieferte Textdatei öffnen
Angehängte Dateien
Dateityp: zip spiel.zip (20,2 KB, 40x aufgerufen)
Signatur wurde auf Wunsch geändert. Deswegen einfach hier drauf klicken-> www.geggi.at.gg
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Das Laden eines Levels dauert zu lange

  Alt 17. Jan 2004, 13:09
Hi,

ich würde mir über den Aufbau der Level Datei gedanken machen.
Du könntest unter anderem mehrere Elemente zusammenfassen. Also z.B.
[field]
RangeX=0::10
RangeY=1::14
typ=4
[/field]

Das muss jetzt nicht genau aussehen, aber da würdest du erstmal die Datei kleiner kriegen.
Jedoch würde dadurch deine Einlese-Algorithmus komplizierter werden.

Eine andere Möglichkeit wäre irgendwie die Größe der Texturen zu erhöhen.

mfG
mirage228
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Benutzerbild von ISAS
ISAS

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

Re: Das Laden eines Levels dauert zu lange

  Alt 17. Jan 2004, 13:49
Es liegt ja nicht an der Textdatei.

Egal, ob die Datei nur 10 Zeilen oder 100 enthält. Es kommt auf die Grösse von maxx und maxy an.

Über das kann ich mir dann gedanken machen, wenns funktioniert.
Aber trotzdem danke
Signatur wurde auf Wunsch geändert. Deswegen einfach hier drauf klicken-> www.geggi.at.gg
  Mit Zitat antworten Zitat
Benutzerbild von Seniman
Seniman

Registriert seit: 15. Sep 2003
Ort: Münster
98 Beiträge
 
#4

Re: Das Laden eines Levels dauert zu lange

  Alt 17. Jan 2004, 16:39
Hi ISAS,

warum speicherst du den Level in einer txt-Datei?
Erstell doch einfach einen Datentyp TLevel oder so, der einen Array enthält mit den Nummern für die Kacheln. Und den kannst du dann speichern mit einem
file of TLevel Dann kannst du den Level mit einem einzigen Befehl laden.
Das sollte auf jeden Fall schneller gehen.

Grüße
Seniman
  Mit Zitat antworten Zitat
Benutzerbild von ISAS
ISAS

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

Re: Das Laden eines Levels dauert zu lange

  Alt 17. Jan 2004, 17:39
Das hört sich nicht schlecht an, sogar ziemlich gut.

Nur leider hab ich keine Ahnung, wie sowas geht.

Also jedem 32x32 grossem Feld eine Nummer geben.
Das wären bei 500x500 Feldern 250000 Felder. Sind ziemlich viele.


Kann mir bitte jemand schreiben, wie das geht. Muss nicht die Lösung sein, sondern nur ein Quellcode mit einem anlichen Beispiel. Es ist für mich am leichtesten, weil ich das meiste von Quellcodes gelernt habe.
Signatur wurde auf Wunsch geändert. Deswegen einfach hier drauf klicken-> www.geggi.at.gg
  Mit Zitat antworten Zitat
Benutzerbild von Seniman
Seniman

Registriert seit: 15. Sep 2003
Ort: Münster
98 Beiträge
 
#6

Re: Das Laden eines Levels dauert zu lange

  Alt 17. Jan 2004, 18:39
Hallo ISAS,

das mit dem Laden und Speichern könnte so funktionieren:

Erst brauchst du einen Datentyp, der alle Informationen enthält, die ein Level/eine Karte braucht. z.B. so:

Delphi-Quellcode:
type
  TLevel = record
    Kachel: Array [1..500,1..500] of Integer; //Hier sind die Nummern der einzelnen Kacheln des Hintergrunds!!
    Autor: String[100];
    Beschreibung: String[100];
  end;
Es gibt allerdings eine Einschränkung: Es dürfen keine dynamischen Arrays und keine Strings ohne Begrenzung vorkommen.

Zum Laden und Speichern machst du folgendes:

Delphi-Quellcode:
function LevelLaden(Dateiname: String):TLevel;
var Datei: File of TLevel;
begin
AssignFile(Datei,Dateiname);
if FileExists(Dateiname) then
  begin
    Reset(Datei);
    Read(Datei,Result);
    CloseFile(Datei);
  end
else
  begin
    //falls Datei nicht existiert.
  end;
end;

Procedure LevelSpeichern(Level: TLevel;Dateiname: String);
var Datei: File of TLevel;
begin
AssignFile(Datei,Dateiname);
ReWrite(Datei);
Write(Datei,Level);
CloseFile(Datei);
end;
Was die einzelnen Befehle (AssighnFile, Reset, Read, Write und Closefile) bringen liest du am besten in der OH nach.
Nun kannst du einen Leveleditor schreiben und dort Levels bauen. Diese kannst du dann mit "LevelSpeichern" speichern und dann im Spiel mit "Levelladen" laden.
Ich hoffe, das hilft dir weiter!

Grüße
Seniman
  Mit Zitat antworten Zitat
moritz

Registriert seit: 18. Apr 2003
1.037 Beiträge
 
#7

Re: Das Laden eines Levels dauert zu lange

  Alt 17. Jan 2004, 18:40
Hallo

Wer sagt denn dass du alle Felder laden musst? Du musst ja nur die Laden, die man sieht und am Besten eine Reihe noch dazu. Wenn man sich bewegt lädst du einfach noch eine und gibst hinten eine Frei. Was glaubst du was 1000² Reihen den RAM belasten?

Gruß
"Optimistisch ist diejenige Weltanschauung, die das Sein höher als das Nichts stellt und so die Welt und das Leben als etwas an sich Wertvolles bejaht."
Albert Schweitzer
  Mit Zitat antworten Zitat
moritz

Registriert seit: 18. Apr 2003
1.037 Beiträge
 
#8

Re: Das Laden eines Levels dauert zu lange

  Alt 17. Jan 2004, 18:42
Zitat von Seniman:
Hallo ISAS,

das mit dem Laden und Speichern könnte so funktionieren:

Erst brauchst du einen Datentyp, der alle Informationen enthält, die ein Level/eine Karte braucht. z.B. so:

Delphi-Quellcode:
type
  TLevel = record
    Kachel: Array [1..500,1..500] of Integer; //Hier sind die Nummern der einzelnen Kacheln des Hintergrunds!!
    Autor: String[100];
    Beschreibung: String[100];
  end;
Es muss ein packed record sein, sonst geht das Speichern nicht:


Delphi-Quellcode:
type
  TLevel = packed record
    Kachel: Array [1..500,1..500] of Integer; //Hier sind die Nummern der einzelnen Kacheln des Hintergrunds!!
    Autor: String[100];
    Beschreibung: String[100];
  end;
Gruß

Onz
"Optimistisch ist diejenige Weltanschauung, die das Sein höher als das Nichts stellt und so die Welt und das Leben als etwas an sich Wertvolles bejaht."
Albert Schweitzer
  Mit Zitat antworten Zitat
Benutzerbild von ISAS
ISAS

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

Re: Das Laden eines Levels dauert zu lange

  Alt 18. Jan 2004, 19:12
Da ich leider nicht so gut in Delphi bin, komm ich da nicht weiter mit den Quellcodes.
Hab noch nie was von File of gehört.

Aber ich habe eines sehr guten Vorschlag von einem Freund bekommen. Der hatte folgende Idee :
Eine gespeicherte Txtdatei sieht so aus:

[1_0]
Typ=2
[2_4]
Typ=2

Das Laden einer txtdatei befindet sich in 2 FOR-Schleifen, die für die X und Y Koordinaten verantwortlich sind.
Es fängt mit [0_0] an, geht dann weiter mit [0_1], [0_2], [0_3] und so weiter. Damit muss er jedesmal die Textdatei nach diesen Kordinaten durchsuchen. Wenn das Map zB. 100x100 Felder ( [100_100] ) gross ist, dann dauert das ja ziemlich lange, da er 100² mal die Textdatei durchsuchen muss.

So, nun war der Vorschlag meines Freundes dieser:

Ich könnte statt:

[1_0]
Typ=2
[2_4]
Typ=2

------->

[Busch] (Wäre Typ=2)
1_0 (Kordinaten X und Y)
2_4 (Kordinaten X und Y)


So gibt es nur eine FOR-Schleife und wenn er Busch fertig hat, überspringt er Busch und geht zum nächsten zB. Baum und so weiter . Nur keine AHnung wie das gehen soll. das mit dem 1 Fall hab ich zusammengebracht.
Nämlich so:

Delphi-Quellcode:
begin
for i:=0 to Maxx do
begin
 for j:=0 to Maxy do
  begin
    steine[i,j].typ:=Data.readInteger(IntToStr(i)+'_'+IntToStr(j),'typ',0);
  end;
end;

Und dann soll er es malen (das brauch ich nicht hinschreiben)
Signatur wurde auf Wunsch geändert. Deswegen einfach hier drauf klicken-> www.geggi.at.gg
  Mit Zitat antworten Zitat
Benutzerbild von Seniman
Seniman

Registriert seit: 15. Sep 2003
Ort: Münster
98 Beiträge
 
#10

Re: Das Laden eines Levels dauert zu lange

  Alt 18. Jan 2004, 19:45
Hallo ISAS,

oder probier es so:
Du schreibst, statt für jedes Feld soetwas wie
[1_0]
Typ=2
zu schreiben, einfach nur die 2 hin. Daneben dann den Typ von dem Feld 2_0 usw.
d.h. du schreibst die Typen der einzelnen Felder hin, ohne anzugeben welches Feld diesen Typ hast. Dadurch, dass du die Felder aber in der Reihenfolge "von links nach rechts und von oben nach unten" in die Datei schreibst, kannst du trotzdem ermitteln, welches Feld gemeint ist. Die Datei sähe dann hinter von innen etwa so aus:
2 2 2 2 1 1 2 1
2 2 2 1 2 2 1 2
...
usw.

Ich hoffe ich habe mich klar genug ausgedrückt.

Grüße
Seniman
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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:42 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