bei einem Projekt, wollte ich eine Karte die als 2D Array vorliegt in ein Binäre Datei schreiben per TWriter. Das ging je doch nicht. Wenn ich jetzt am Rand Objekte Plaziert haben fehlten immer die Letzten in der Rechten unteren Ecke. Dann habe ich es mit TIniFile Probiert und siehe da, da geht es. Die beiden Speicher Funktionen sehen so aus:
Code: Alles auswählen
procedure TPLGameLevel.SaveToFile(const aFileName: String);
var
x,y,id:Integer;
fs:TFileStream;
fsW:TWriter;
str:String;
begin
y:=0; x:=0;
if FileExists(aFileName) then
DeleteFile(aFileName);
fs:=TFileStream.Create(aFileName,fmCreate);
fs.Position:=0;
fsW:=TWriter.Create(fs,120);
fsW.WriteInteger(Length(map)); // Höhe, Breite
fsW.WriteInteger(Length(map[0]));
for x:=0 to Length(Map)-1 do begin
for y:=0 to Length(Map[x])-1 do begin
if Assigned(Map[x,y]) then begin
fsW.WriteInteger(x); fsW.WriteInteger(y);
fsW.WriteInteger(map[x,y].id);
writeln(x,'\',y,'\',map[x,y].id);
end;
end; // for x
end; // for y
FreeAndNil(fsW); FreeAndNil(fs);
end; // TPLGameLevel.SaveToFile
procedure TPLGameLevel.SaveToIniFile(const aFileName: String);
var
x,y:Integer;
IniFile:TIniFile;
str:string;
begin
y:=0; x:=0;
IniFile:=TIniFile.Create(aFileName);
str:=IntToStr(Length(map)) + ',' + IntToStr(Length(map[0]));
IniFile.WriteString('Data','Size',str);
for x:=0 to Length(Map)-1 do begin
for y:=0 to Length(Map[x])-1 do begin
if Assigned(map[x,y]) then begin
str:=IntToStr(x) + '|' + IntToStr(y) + '|' + IntToStr(map[x,y].id);
IniFile.WriteString('Data','Item'+IntToStr(x)+','+IntToStr(y),str);
end;
end; // for y
end; // for x
IniFile.Free;
end; // TPLGameLevel.SaveToIniFile
Also was mache ich Falsch ?