| Autor |
Beitrag |
jackie05
      
Beiträge: 357
|
Verfasst: Fr 14.08.09 20:10
Hallo,
sry, ich wusste jetzt nicht wie ich den Thread nennen sollte.
Ich habe in Blitz3D ein Spiel geschrieben und möchte in Delphi 7 einen Leveleditor schreiben, ist soweit fertig und klappt auch, bis auf das laden der Map.dat Datei.
Das Problem ist, das ich in Blitz3D alle Integer Variablen über ReadInt lese und in Delphi gibt es den Befehl ReadInt im TFileStream Object nicht.
Meine Map Dateien sehen so aus:
Moderiert von Narses: Als Text eingefügte Binärdaten gelöscht. Bitte die Datei ggfs. anhängen!
Das klappt alles Wunderbar zu laden in meinem Spiel, aber wie kann ich die Dateien in Delphi laden?
Ich arbeite mit ReadInt, ReadLine und ReadByte in Blitz3D, nur gibt es diese nicht in Delphi, ist ja klar.
Wie könnte ich ReadInt, ReadLine und ReadByte in Delphi verwenden?
Ich bedanke mich schonmal im Voraus.
MfG
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: Fr 14.08.09 20:31
Du hast grad nicht wirklich eine Binär-Datei als Text eingefügt, oder? Und dann auch noch mit Delphi-TAGs, oh man...  Da sollte man doch schon in der Vorschau sehen, dass das keinen gibt  Wenn notwendig, häng die Datei bitte an.
In Delphi gibt es ja den TFileStream. Zum einen findest du darüber sicher schon einige Erklärungen hier im Forum.
Ein Byte oder einen Integer lesen könntest du mit MyFileStream.Read(MyByte, SizeOf(MyByte)); oder so ähnlich.. hab grad kein Delphi hier.
ReadLine könnte schon schwieriger werden. Wozu auch, bei einer Binärdatei..? Du könntest Byte für Byte in einem Array speichern, und bei $13 abbrechen.
_________________ PROGRAMMER: A device for converting coffee into software.
|
|
Tilman
      
Beiträge: 1405
Erhaltene Danke: 51
Win 7, Android
Turbo Delphi, Eclipse
|
Verfasst: Sa 15.08.09 12:31
Über Streams kann ich nix sagen, habe nie damit gearbeitet, aber wenn die Datei nur Integer enthält kannst du das ganz einfach mit typisierter Datei machen:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| var datei: file of integer; zahl: integer; begin AssignFile(datei,'dateiname'); reset(datei); while not eof(datei) do begin read(datei,zahl); end; closefile(datei); end; |
_________________ Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)
|
|
jackie05 
      
Beiträge: 357
|
Verfasst: Sa 15.08.09 14:01
Danke euch.
Also, in der Map.dat Datei steht die Position des Spielers(Int) und die Daten für die Map(Byte)
Sry, mein Spiel ist in BlitzMax geschrieben und nicht in Blitz3D, mein fehler.
Ich habe ein Map Editor in BlitzMax geschrieben und so sieht die Speicher Funktion aus:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| Function MapSave() Local Datei:TStream = WriteFile("Map001.dat") WriteInt(Datei,FeldXAnzahl) WriteInt(Datei,FeldYAnzahl) WriteInt(Datei,spieler_x_feld) WriteInt(Datei,spieler_y_feld) For Local y:Int=0 To FeldYAnzahl-1 For Local x:Int=0 To FeldXAnzahl-1 WriteByte(Datei,Spielfeld[x,y].Wert) Next Next CloseFile(Datei) End Function |
nur möchte ich ein Map Editor in Delphi schreiben, was auch schon fast fertig ist, bis auf die Speicher Funktion.
Wie könnte ich das in Delphi umschreiben?
Danke schonmal.
MfG
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: Sa 15.08.09 14:19
Delphi-Quelltext 1: 2:
| MyInteger := FeldXAnzahl; MyStream.Write(MyInteger, SizeOfMyInteger); |
Sollte als Beispiel reichen?
_________________ PROGRAMMER: A device for converting coffee into software.
|
|
jackie05 
      
Beiträge: 357
|
Verfasst: Sa 15.08.09 18:36
Danke Dir.
Das ist mir schon klar, nur wie kann ich Byte Werte Speichern?
MfG
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Sa 15.08.09 18:42
naja, wie speicherst du die werte den in blitzbasic???
du könntest hier zum beispiel ein array verwenden.
lg elundril
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
jackie05 
      
Beiträge: 357
|
Verfasst: Sa 15.08.09 21:36
Ich beschäftige mich zurzeit mit BlitzMax und nicht mit BlitzBasic, das hatte ich auch geschrieben gehabt, da ich mich vertippt hatte.
Wie ich es in BlitzMax Speicher, hatte ich auch schon gezeigt, weiter oben.
Hier nochmal:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| Function MapSave() Local Datei:TStream = WriteFile("Map001.dat") WriteInt(Datei,FeldXAnzahl) WriteInt(Datei,FeldYAnzahl) WriteInt(Datei,spieler_x_feld) WriteInt(Datei,spieler_y_feld) For Local y:Int=0 To FeldYAnzahl-1 For Local x:Int=0 To FeldXAnzahl-1 WriteByte(Datei,Spielfeld[x,y].Wert) Next Next CloseFile(Datei) End Function |
Danke schonmal.
MfG
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: So 16.08.09 07:56
jackie05 hat folgendes geschrieben : | Danke Dir.
Das ist mir schon klar, nur wie kann ich Byte Werte Speichern? |
Äh, genau so, nur dass du statt einer Integer Variablen, eine Byte Variable nimmst?
_________________ PROGRAMMER: A device for converting coffee into software.
|
|
jackie05 
      
Beiträge: 357
|
Verfasst: So 16.08.09 10:31
Achso, stimmt ja.
Ich Danke Dir, nun funktioniert es.
MfG
|
|
|