schätze auch mal das SL nicht initialisiert wurde.
Nun, Sakura hat ja im Endeffekt recht, also nehmen wir den umständlichen Weg übers Forum..
Delphi-Quellcode:
TFeld = record
mapname: string; // Map-Name
bgmusic : string; // Die Hintergrundmusik - falls nix, keine Änderung
x: Integer; // X-Koordinate
y: Integer; // Y-Koordinate
Textur : String; // Texturpfad für das Feld
Textur2 : String; // 2. Texturen-Ebene
Textur3 : String; // 3. Texturen-Ebene (über Held)
Begehbar : boolean; // Kann man auf dem Feld laufen oder nicht
Teleportx : integer; // Datentyp der die X,Y Koordinate enthält auf welches
Teleporty : integer; // Feld teleportiert wird (0/0) für kein Teleportfeld
Ereignis1 : string;
Ereignis2 : string;
maxsizex,maxsizey : integer;
startx,starty : integer;
end;
Was mir erstmal stark auffällt, Du hast da ziemlich viel unnützes Zeug drinne. Wenn ich mal die benötigte Größe der Variablen zusammen rechne und mit der Größe der Map multipliziere (ich bin mit davon ausgegangen, daß die Strings 255 Byte beanspruchen, kann ja ne Menge mal drinne sein) dann kommst Du auf knapp 1,8 GB Speicher benutzung für die Map.
Wollen wir uns mal die Variablen durchgucken.
Mapname: Was ist das ? Der Name des Tiles auf dem man steht ? Soll da denn "Pflasterboden" oder "Sandboden" stehen ? Kann man alles zentralisieren, da belegt es nur einmal den Platz.
BGMusic: Schätze mal Pfad zu ner MIDI Datei, nur wieso ? Die Musik wird sich nicht bei jedem Feld ändern, da isses sinnvoll man programmiert sich Regionen, in denen eine bestimmte Midi Musik abgespielt wird.
X, Y: Sind vom Typ integer, da man maximal bis 1001|1001 gehen kann, isses recht unsinnig da für jede Variable jeweils 2 Byte übern Haufen zu schmeißen. Wenn ichs mir sogar noch recht überlege, dann sind die beiden Variablen eh nutzlos, weil du die X/Y Koordinaten auf dem Char speichern kannst bzw. für die X/Y Koordinaten ja aufs Feld im Array zugreifst -> Müll.
Textur1, Textur2, Textur3: Sind alles Pfadnamen, was mehr als daneben ist. Da kannste eher die Bilder als Hexadezimale Nummern abspeichern, z.b. "0F2A.bmp" und dann damit drauf zugreifen, da haste dann insgesamt nur 6 Byte für alle drei Variablen.
Begehbar: 8 Bit benötigt um eigentlich nur 1 Bit zu benutzen. Da würd ich Dir zu ner Bitmaske raten, z.b. werden bei MaxSizeX/Y, StartX/Y, TeleportX/Y nur maximal 10 von 16 bits (nach meinem Vorschlag s.u.) verwendet. Wenn Du das eine Bit da drinne mit versteckst, wird sich niemand beklagen. Mit der Methode hast Du übrigens dann gleich Platz für 35 andere True/False Konditionen, die Du nicht extra abspeichern musst.
TeleportX/Y: Siehe oben, da brauchst Du auch maximal pro Variable ein Word und kein Integer. Auch wenn ich die Methode ziemlich daneben finde das so zu machen, isses erstmal eine gute Variante da Du keine Items/Item Events programmiert hast womit man das eher machen könnte.
Ereignis1/2: keinen blassen Schimmer was Du anhand von Strings machen möchstes, deshalb kann ich da keine Vorschläge machen.
MaxSizeX/Y, StartX/Y: ich denke nicht daß Du die Dinger brauchst, aber ich würde auch hier statt nem Integer ein Word nehmen.
Erstmal soviel dazu.
Zeig doch mal nen paar Bilder von dem was Du schon hast, oder noch besser das Projekt in der momentanen Verfassung. Da kann man dann noch besser druff eingehen.