Zitat:
Man specihert einfach jedes einzelne "Bild"
Das währe unpraktisch und ist auch nicht nötig.
Bei mir habe ich das so gelöst:
Es gibt eine Goable Image Liste in der alle Bilder drin sind.
Jedes Bild ist also ein Objekt. Jedes Objekt hat z.b. eine eindeutige ID, einen namen, Left und Top und soweiter.
Beim Datei Format kannst du jetzt einfach nur die ID und die Left und Top Position speichern.
Hier ist meine Speicher Procedure:
Delphi-Quellcode:
procedure TPluto2DBaseGameA.SaveRooms(const aFileName: String);
var
sf:TStringList;
x,y,x2,y2,i:Integer;
str:String;
begin
sf:=TStringList.Create;
str:=IntToStr(CurrPt.X) + ',' + IntToStr(CurrPt.Y);
sf.Add('CurrRoom:' + str);
sf.Add(player.Typ + '|' + Player.Id + '|' + IntToStr(Player.Left div 20) + '|' + IntToStr(Player.Top div 20));
for y:=0 to 10 do begin
for x:=0 to 10 do begin
if Assigned(Rooms[x,y]) then begin
str:='Room:' + IntTostr(x) + ',' + IntTostr(y);
sf.Add(str);
for y2:=0 to MapH do begin
for x2:=0 to MapW do begin
if (Assigned(Rooms[x,y].Map[x2,y2])) and (not Rooms[x,y].Map[x2,y2].isDel) then begin
str:=Rooms[x,y].Map[x2,y2].Typ + '|' + Rooms[x,y].Map[x2,y2].Id + '|' +
IntTostr(Rooms[x,y].Map[x2,y2].Left div MapS) + '|' +
IntTostr(Rooms[x,y].Map[x2,y2].Top div MapS);
sf.Add(str);
end;
end; // for x2
end; // for y2
for i:=0 to Rooms[x,y].ListTeleporter.Count-1 do begin
str:=Rooms[x,y].ItemTeleporter[i].Typ + '|' + Rooms[x,y].ItemTeleporter[i].Id + '|' +
IntTostr(Rooms[x,y].ItemTeleporter[i].Left div MapS) + '|' +
IntTostr(Rooms[x,y].ItemTeleporter[i].Top div MapS);
sf.Add(str);
end;
for i:=0 to Rooms[x,y].ListPunkte.Count-1 do begin
str:=Rooms[x,y].ItemPunkt[i].Typ + '|' + Rooms[x,y].ItemPunkt[i].Id + '|' +
IntTostr(Rooms[x,y].ItemPunkt[i].Left div MapS) + '|' +
IntTostr(Rooms[x,y].ItemPunkt[i].Top div MapS);
sf.Add(str);
end;
for i:=0 to Rooms[x,y].ListGegner.Count-1 do begin
str:=Rooms[x,y].ItemGegner[i].Typ + '|' + Rooms[x,y].ItemGegner[i].Id + '|' +
IntTostr(Rooms[x,y].ItemGegner[i].Left div MapS) + '|' +
IntTostr(Rooms[x,y].ItemGegner[i].Top div MapS);
sf.Add(str);
end;
end;
end; // for x
end; // y
sf.SaveToFile(aFileName);
end; // TPluto2DBaseGameA.SaveRooms
Das soll nur als Beispiel dinen
Ich meinte mit bin nicht die Datei Endung sondern das Datei Format an sich. Also BINÄR ab speichern z.b. mit TFileStream oder so.
Aber ich denke das einfachste ist für dich per TStringList abzuspeichern.
Je nach dem wie komplex dein Spiel werden soll könnte ich die auch anbieten meine 2D Engine zu nutzen.
Sie basiert auf Canvas und ist im Moment leider nur für Lazarus nutzbar und unter Windows gibt es einige Probleme z.b. das irgendeine Datei nicht gefunden wird, muss ich mal genau nach schauen warum das so ist.
Ich weiß jetzt nicht genau wie einfach Andorra ist. Evlt. gibt es dort ja auch eine ImageListe oder sowas.
Weil damit währe für dich einige Problem gelöst.
Falls du hier angemeldet bist;
http://www.delphigl.com/forum/viewtopic.php?t=7319
kannst du mein 2D Engine schon runter laden. Wenn nicht kann ich sie auch nochmal hier hochladen. Kein Problem.
Ich habe meine 2D Engine eigentlich mit dem Ziel geschrieben das alles einfach ist und wiederkerne aufgaben in der Engine bereist gelöst sind. Z.B. für die Kollision Erkennung.
Oder das laden und verwalten von Bild Objekten. und soweiter.
Evlt. währe das ja was für dich.
(Damit möchte ich aber keine Werbung für meine 2D Engine machen, sondern sie nur erwähnen als altnative
ich selbst habe damit viele Projekte am laufen. Und auch noch Erweiterungen die aber noch nicht Fertig sind und wie gesagt die Engine läuft nur unter Lazarus mit der lib OpBitMap(Mit Paar änderungen könnte man auch auf OpBitmap versichten nur dann kann man nur BMP Dateien laden) zusammen