Entwickler-Ecke

Dateizugriff - Untypisierte Dateien: Fehler 87


MathiasH - Sa 09.11.02 10:36
Titel: Untypisierte Dateien: Fehler 87
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 :roll: .

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


wulfskin - 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!


AndyB - 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);


MathiasH - Mi 08.01.03 18:04

problem längst gelöst: ich hab einfach nen stream genommen, und es lief wunderbar :D

MathiasH