Leveleditor Datei schreiben!

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Lars

Betreff: Leveleditor Datei schreiben!

BeitragFr, Dez 11, 2009 14:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey!

Ich habe ein problem ich will einen Leveleditor schreiben.
Jedesmal wenn ich klicke sollen die Koordinaten der maus in einer Datei abgespeichert werden.
Aber wenn ich in die datei gucke steht da nur noch die letzte Koordinate.

Code: [AUSKLAPPEN]
Graphics 640,480,0,2


SetBuffer = BackBuffer






c=0

d=0

Repeat

Repeat




Rect MouseX(),MouseY(),40,40





x=MouseX()
y=MouseY()



Until MouseHit(1)

Print x
Print y


fileout = WriteFile ( "test.txt" )

SeekFile fileout,c

c=c+5

WriteLine  fileout, x

CloseFile ( fileout )



fileout = WriteFile ( "test.txt" )

SeekFile fileout,c

c=c+5

WriteLine  fileout, y

CloseFile ( fileout )








Until KeyHit (1)



 

WaitKey
 
End


Ich brauche Hilfe!

Vielendank schon einmal im Vorraus.

mfg Lars

Nicdel

BeitragFr, Dez 11, 2009 15:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Nimm statt

SeekFile c

das hier:

SeekFile FileSize("test.txt")
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7
 

Lion

BeitragFr, Dez 11, 2009 15:07
Antworten mit Zitat
Benutzer-Profile anzeigen
desweiteren brauchst du nicht für jede variable den stream erneut öffnen, das kannst du ganz simpel in einem rutsch machen
Intel Core 2 Quad 4x2.66 ghz - 4gb ddr2 - nvidia GeForce GTX660 2gb
Intel Atom 1x1.83 ghz - 2gb ddr2 - intel GMA 3150 256mb
AMD A10-5750M 4x2.5 ghz - 8 gb ddr4 - AMD R9 M290x
 

Lars

BeitragFr, Dez 11, 2009 15:11
Antworten mit Zitat
Benutzer-Profile anzeigen
da ist leider weiterhin das gleiche Problem

hectic

Sieger des IS Talentwettbewerb 2006

BeitragFr, Dez 11, 2009 15:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würde einen etwas anderes Vorgehen vorschlagen, habe aber grad auch keine Lust auf alle penibelst einzugehen. Grob aber mal trotzdem ein paar Infos:

- Setbuffer Backbuffer() ist richtig, nicht Setbuffer = Backbuffer
- Ich hab durch das ewige rumscrollen schon ein Krampf im Finger. Man muß es nicht unbedingt so weit ausdehnen.
- Wenn man Backbuffer() benutzt, dann gehört auch ein Flip im Code da rein.
- Print ist nur ein Relikt aus vergangener Zeit und sollte nur noch für Debuggähnliche Zwecke eingesetzt werden. Nimm statt dessen Text.
- Funktionen wie MouseX sollte am Anfang einer Schleife in eine Variable gespeichert werden.

Code: [AUSKLAPPEN]
Graphics 640,480,0,2
SetBuffer BackBuffer()

Local Timer=CreateTimer(58)
Local MX%,MY%
Local IX%,IY%
Local Datei%

Const TILES=32
Const XDIM=19
Const YDIM=14

Dim Map%(XDIM,YDIM)




While Not KeyHit(1)
   
   MX=MouseX()/TILES
   MY=MouseY()/TILES
   
   Rect MX*TILES,MY*TILES,TILES,TILES,0
   
   Text 20,20,MX
   Text 20,40,MY
   
   If MouseDown(1) Then Map(MX,MY)=1
   If MouseDown(2) Then Map(MX,MY)=0
   
   
   ; MAP/ZEICHNEN
   For IY=0 To YDIM
      For IX=0 To XDIM
         If Map(IX,IY)=1 Then Rect IX*TILES,IY*TILES,TILES,TILES,1
      Next
   Next
   
   
   ; F1/LOAD
   If KeyHit(59) Then
      Datei=ReadFile("c:\jojo.dat")
      For IY=0 To YDIM
         For IX=0 To XDIM
            Map(IX,IY)=ReadByte(Datei)
         Next
      Next
      CloseFile Datei
   End If
   
   
   ; F2/SAVE
   If KeyHit(60) Then
      Datei=WriteFile("c:\jojo.dat")
      For IY=0 To YDIM
         For IX=0 To XDIM
            WriteByte Datei,Map(IX,IY)
         Next
      Next
      CloseFile Datei
   End If
   
   
   WaitTimer Timer
   Flip 0
   Cls
Wend
End
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Midimaster

BeitragSa, Dez 12, 2009 0:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn Du die X und Y Koordinaten so in die Datei scheiben willst, dass sie sich nachher dort als Text lesen lassen, ist das Beispiel von "hectic" nicht das Richtige. Das speichert gleich die ganze MAP ab. Un dies nicht als lesbare ASCIIs.

Ich habe mal gelesen, das WRITEFILE immer eine bestehende Datei 100% löscht, bevor er sie öffnet. Verwende doch mal OPENFILE. Dann kannst Du mit SEEKFILE und FILESIZE an das Ende der Datei springen und dort weiter Zeilen anfügen. Ich würde daraus eine eigene Function machen:
Code: [AUSKLAPPEN]
Function AppendFile(Datei$, Zeile$)
    AnzahlBytes%=FileSize(Datei)
    FileStream = OpenFile(Datei)
        SeekFile FileStream, AnzahlBytes
        WriteLine FileStream, Zeile
    CloseFile FileStream
End Function
(kann sein, dass der Code noch Fehler enthält, ich habe leider kein BlitzBasic...)

In Deinem Programm rufst Du solche eine Function nur noch mit:

Code: [AUSKLAPPEN]
AppendFile "test.txt", X
AppendFile "test.txt", Y


Übrigens halte ich es nicht für klug, die Koordinaten einfach so ohne Beschreibung abzuspeichern. Vielleicht wäre es so besser:
Code: [AUSKLAPPEN]
locZeile$= "X= " + X + "; Y=" + Y
ApendFile "test.txt", locZeile


dann hast Du nachher in der Datei stehen...
Code: [AUSKLAPPEN]
X=14; Y=123;
X=28; Y=234;
u.s.w


Wofür wirst du denn die abgespeicherten Koordinaten benötigen?
 

Lars

Betreff: Danke!

BeitragSa, Dez 19, 2009 12:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielen Dank für die schnelle Hilfe.

@Midimaster:Naja, Ich will einen Leveledior für ein 2D Prjekt von mir programmieren.
In der txt Datei will ich eigentlich nur kontrollieren können ob alles geklappt hat und mir Übersicht verschaffen, fals ich noch andere Dinge einebauen will wie z.B. Fallen oder so Etwas.

Midimaster

BeitragSa, Dez 19, 2009 12:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Naja, wenn Du X und y abwechselnd in die Datei schreibst, kann es später beim Duchlesen schon zu Verwechslungen kommen, welcher Wert nun x und wo y ist. Oder welches Y zu welchem X gehört. Probier doch mal die einzeilige Variante.

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group