AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi [Andorra] Mapeditor speichern und laden...

[Andorra] Mapeditor speichern und laden...

Ein Thema von sabbert · begonnen am 8. Apr 2010 · letzter Beitrag vom 8. Apr 2010
Antwort Antwort
sabbert

Registriert seit: 16. Apr 2008
67 Beiträge
 
#1

[Andorra] Mapeditor speichern und laden...

  Alt 8. Apr 2010, 13:10
Tag zusammen,

für mein Spiel programmiere ich einen Mapeditor.

Ich erzeuge ein Grid und der Benutzer kann aus verschiedenen Texturen auswählen, welches er benutzen möchte z.B.

Weg,Start,Ziel,Feld,Checkpoint. Dann klickt er auf das Grid und es werden die Koordinaten Gespeichert auf die der Benutzer geklickt hat.

Z.B. Feld[6,1] sind die Koordinaten 600,100. Diese werden als TPoint in ein Array Gespeichert.

Für Weg,Feld,... etc. gibt es einzelne Arrays die ich in einem Record zusammengefasst habe(siehe code):
Delphi-Quellcode:
type MapDatenTyp = Record
                  aFeld : Array of TPoint;
                  aWeg : Array of TPoint;
                  aCheckpoints : Array of TPoint;
                  Start,Ziel : TPoint;
                  end;
Mein Problem ist es das Record,also jedes Array darin ,alle zusammen in eine Datei zu speichern und zu laden.

Beim laden sollen dann einfach die Daten wieder in das Array gelesen werden.

Bitte um Vorschläge und Ideen

mfg
Miniaturansicht angehängter Grafiken
mapeditor_197.jpg  
Christian
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: [Andorra] Mapeditor speichern und laden...

  Alt 8. Apr 2010, 14:01
Für Arrays oder Listen von Objekten speichert man zuerst die Anzahl oder Gesamtgröße aller Elemente und dann die Daten der Elemente selbst.
Beispiel
  Mit Zitat antworten Zitat
Benutzerbild von SimonRap
SimonRap

Registriert seit: 17. Okt 2009
Ort: Mahlow
147 Beiträge
 
Delphi 6 Personal
 
#3

Re: [Andorra] Mapeditor speichern und laden...

  Alt 8. Apr 2010, 14:13
Ich würd jetzt einfach die Daten also start ziel usw. in ne VARiable (z.b VAR MapDaten:MapDatenTyp schreiben, dann mit assignfile, rewrite, write und closefile einfach speichern...
Ich versteh dein Problem nicht ganz...
[edit]
Zitat von Blup:
Für Arrays oder Listen von Objekten speichert man zuerst die Anzahl oder Gesamtgröße aller Elemente und dann die Daten der Elemente selbst.
Beispiel
Das natürlich auch noch.
[/EDIT]
Simon
  Mit Zitat antworten Zitat
sabbert

Registriert seit: 16. Apr 2008
67 Beiträge
 
#4

Re: [Andorra] Mapeditor speichern und laden...

  Alt 8. Apr 2010, 14:33
schonmal danke für die antworten

Also ein array zu speichern ist nicht unbedingt das Problem.

Aber soweit ich weiß kann man ein Record nicht direkt speichern sondern muss jedes Teil , also hier die Array abspeichern.
Wenn ich das alles hintereinander abspeicher, also erst Array1 dann Array 2 klappt das bloß beim Laden weiß ich nicht wie ich das Machen soll.

Z.B. bei einem Array öfnne ich die Datei und lese die Datei solange bis ich beim Ende bin und schreibe sozusagen jede Zeile in mein Array.

Doch wenn ich mehrere Arrays hab wie mach ich das der bis zu einem bestimmten Punkt die Datei liest und in das Array schreibt und danach mit einem anderen Array weitermacht?

z.B. so:
Delphi-Quellcode:
AssignFile(F,OpenDialog1.FileName);
ReSet(F);
i := 0;
while not Eof(f) do
 begin
  Read(f,pMapDaten.aFeld[i]);
  inc(i);
 end;
CloseFile(F);
aber das ist ja nur ein Array und wie kann ich mehrere Arrays hintereinander lesen?
Christian
  Mit Zitat antworten Zitat
Benutzerbild von SimonRap
SimonRap

Registriert seit: 17. Okt 2009
Ort: Mahlow
147 Beiträge
 
Delphi 6 Personal
 
#5

Re: [Andorra] Mapeditor speichern und laden...

  Alt 8. Apr 2010, 14:53
Meines wissens nach geht das...
Ein Altes Projekt, da hab ich das so gemacht und es ging:
Delphi-Quellcode:
//der typ
             TYPE TBla= RECORD
             name: STRING[50] ;
             x: ARRAY [1..10]of integer ;
             y: ARRAY [1..10]of integer ;
             END;

...
//zum speichern
assignfile(f,form1.SaveDialog1.Filename);
IF fileexists (form1.SaveDialog1.FileName)
THEN
 BEGIN
 RESET (f);
 SEEK (f,filesize(f));
 END
ELSE
Rewrite(f);
Write(f,bla);
Closefile(f);
...
//laden
if opendialog1.execute then
 begin
 assignfile (f,opendialog1.FileName);
 Reset (f);
 while not eof(f)do
  begin
  read(f,bla);
  combobox1.Items.Add(bla.name);
  end;
  combobox1.ItemIndex:=-1;
 showmessage('Datei geladen');
is extrem alt, aber hat funktioniert^^
müsste eig klappen
mfg simon
Simon
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: [Andorra] Mapeditor speichern und laden...

  Alt 8. Apr 2010, 15:04
Das funktioniert so nur mit Arrays fester Größe.

Ansistrings sind im Prinzip auch nur Arrays mit dynamischer Größe und wie man die speichert und wieder liest, findest du in meinem Beispiel. Ich würde mit TStream (bzw. TFileStream) statt mit File arbeiten, ist einfach universeller.

Edit, z.B. so:
Delphi-Quellcode:
type
  TPointArray = array of TPoint;

procedure PointArray_Write(AStream: TStream; const AValue: TPointArray);
var
  n: Longword;
begin
  n := Length(AValue);
  AStream.WriteBuffer(n, SizeOf(n));
  if n > 0 then
    AStream.WriteBuffer(AValue[0], SizeOf(AValue[0]) * n);
end;

procedure PointArray_Read(AStream: TStream; var AValue: TPointArray);
var
  n: Longword;
begin
  AStream.ReadBuffer(n, SizeOf(n));
  SetLength(AValue, n);
  if n > 0 then
    AStream.ReadBuffer(AValue[0], SizeOf(AValue[0]) * n);
end;
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:24 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz