Autor Beitrag
MathiasH
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 699

WinXP, Win98SE, Debian, Win95
D5 Stand, D6 Prof
BeitragVerfasst: 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 :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:
ausblenden 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1349
Erhaltene Danke: 1

Win XP
D5 Pers (SSL), D2005 Pro, C, C#
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: 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.

ausblenden Quelltext
1:
2:
3:
Reset(f, 1);

Rewrite(f, 1);

_________________
Ist Zeit wirklich Geld?
MathiasH Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 699

WinXP, Win98SE, Debian, Win95
D5 Stand, D6 Prof
BeitragVerfasst: Mi 08.01.03 18:04 
problem längst gelöst: ich hab einfach nen stream genommen, und es lief wunderbar :D

MathiasH

_________________
"Viel von sich reden, kann auch ein Mittel sein, sich zu verbergen."
Friedrich Nietzsche