| Autor |
Beitrag |
MathiasH
      
Beiträge: 699
WinXP, Win98SE, Debian, Win95
D5 Stand, D6 Prof
|
Verfasst: Sa 09.11.02 10:36
Hi Leude
Wie einige von euch vielleicht schon wissen baue ich an einem Game-Projekt mit, doch da sind wir auf ein Problem gestoßen: Das Speichern und Laden der Map
Die Map ist ein record, das einige Eigenschaften besitzt und zwei Arrays mit variabler Größe. Das erste array ist 2 dimensional(die Karte), und das zweite ist eindimensional(die Objekte).
In eine untypisierte Datei speichere ich nun zuerst die größen der Arrays(3Xword), die dann beim Laden an das Map record zugewiesen wird(Set Length), das Problem: Beim laden entsteht jedes mal Fehler 87, wenn das Programm versucht die Map auszulesen  .
ich habe auch schon versucht, den Teil für die größen Bestimmung der Arraylänge wegzulassen, da sie ja gleich bleiben, aber das Resultat blieb das selbe  , auch die file Positionen habe ich überwacht, sie sind beim laden und speicher völlig identisch, und auch sizeOf(map) gibt beide male den selben Wert aus(299)
Ich hoffe jemand hat ne idee, woran es liegt
LoadMap:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
| procedure LoadMap(filename: string); var f: file; i: DWord; begin assignfile(f,Filename + '.map'); reset(f); BlockRead(f,TileCountX, 16); BlockRead(f,TileCountY, 16); TilecountX := 100; TilecountY := 75; BlockRead(f,Objectcount, 16);
clearmap; clearobjects;
BlockRead(f, Map.FileInfo, SizeOf(Map.FileInfo)); BlockRead(f, Map.CopyrightInfo, SizeOf(Map.CopyrightInfo)); BlockRead(f, Map.InfoText, SizeOf(Map.InfoText)); BlockRead(f, Map.PlayerStartX, SizeOf(Map.PlayerStartX)); BlockRead(f, Map.PlayerStartY, SizeOf(Map.PlayerStartY)); BlockRead(f, Map.Environment, SizeOf(Map.Environment));
BlockRead(f, Map.Map, SizeOf(Map.Map)); BlockRead(f, Map.Objects, SizeOf(Map.Objects)); closefile(f); end; |
SaveMap:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
| procedure SaveMap(filename: string); var f: file; i: DWord; begin map.FileInfo:='Auroria-Online Map ';
assignfile(f,FileName + '.map'); rewrite(f); BlockWrite(f, TileCountX, 16); BlockWrite(f, TileCountY, 16); BlockWrite(f, ObjectCount, 16);
BlockWrite(f, Map.FileInfo, SizeOf(Map.FileInfo)); BlockWrite(f, Map.CopyrightInfo, SizeOf(Map.CopyrightInfo)); BlockWrite(f, Map.InfoText, SizeOf(Map.InfoText)); BlockWrite(f, Map.PlayerStartX, SizeOf(Map.PlayerStartX)); BlockWrite(f, Map.PlayerStartY, SizeOf(Map.PlayerStartY)); BlockWrite(f, Map.Environment, SizeOf(Map.Environment));
BlockWrite(f, Map.Map, SizeOf(Map.Map)); BlockWrite(f, Map.Objects, SizeOf(Map.Objects));
closefile(f); end: |
MathiasH
_________________ "Viel von sich reden, kann auch ein Mittel sein, sich zu verbergen."
Friedrich Nietzsche
|
|
wulfskin
      
Beiträge: 1349
Erhaltene Danke: 1
Win XP
D5 Pers (SSL), D2005 Pro, C, C#
|
Verfasst: Mi 08.01.03 15:54
Hallo Mathias!
Kannst du auch noch den Aufbau der 3 Records posten?
Ich glaub, dann kann ich dir helfen!
Gruß Hape!
_________________ Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.
|
|
AndyB
      
Beiträge: 1173
Erhaltene Danke: 14
RAD Studio XE2
|
Verfasst: Mi 08.01.03 16:32
Da du f als file und nicht als file of Byte deklariert hast, musst du dem Reset und Rewrite die Datensatzgröße angeben.
Quelltext 1: 2: 3:
| Reset(f, 1);
Rewrite(f, 1); |
_________________ Ist Zeit wirklich Geld?
|
|
MathiasH 
      
Beiträge: 699
WinXP, Win98SE, Debian, Win95
D5 Stand, D6 Prof
|
Verfasst: Mi 08.01.03 18:04
problem längst gelöst: ich hab einfach nen stream genommen, und es lief wunderbar
MathiasH
_________________ "Viel von sich reden, kann auch ein Mittel sein, sich zu verbergen."
Friedrich Nietzsche
|
|
|