Aktuelle Zeit: 27.05.2020 14:35

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 16 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Autor Nachricht
 Betreff des Beitrags: Re: Sprung eines sprites simulieren
BeitragVerfasst: 05.04.2010 18:59 
Offline
Benutzeravatar

Registriert: 15.09.2007 17:12
Wohnort: Irgendwo im Nirgendwo
Wie ist deine Datei denn aufgebaut?

_________________
Ich verkaufe Rechtschreibfehler und jede menge GROßBUCHSTABEN. Alles unbegrenzt zu haben.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Sprung eines sprites simulieren
BeitragVerfasst: 05.04.2010 19:31 
Offline

Registriert: 10.11.2004 03:22
lad die ganze Datei auf einen rutsch, keine Dateioperationen im Game-Loop.
du brauchst für ne anständige Tilemap ein 2D-Array, schau dir mein verlinktes Beispiel noch mal genau an.

wie man sowas als binary speichert und lädt, hab ich als sidenote in BMP2MAP drin:
viewtopic.php?f=8&t=2131&start=0

_________________
... machts gut und danke für den fisch ...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Sprung eines sprites simulieren
BeitragVerfasst: 05.04.2010 19:35 
Offline
Benutzeravatar

Registriert: 25.01.2010 15:51
Also ich wollte die datei eigentlich als txt speicher und sie ist wie folgt aufgebaut

x y img
123 234 3
...

_________________
Win 7 Home Premium 64 Bit \ PB 4.41 Demo\2.8Ghz QuadCore \4GB RAM\ nVidia GTS 250

Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Sprung eines sprites simulieren
BeitragVerfasst: 05.04.2010 20:03 
Offline

Registriert: 10.11.2004 03:22
also, latürnich darfst du die Datei als .txt speichern...
grundsätzlich würde ich dir dann ein format wie
Code:
0/0 1/0 2/0 3/0 4/0
0/1 1/1 2/1 3/1 4/1
0/2 1/2 2/2 3/2 4/2
0/3 1/3 2/3 3/3 4/3

empfehlen, also eine tilezeile, eine textzeile.
also, das da sind die koordinaten, nicht der Inhalt. grundsätzlich speicherst du nur den Inhalt.
per ReadString() bekommst du glaubich jede Zeile einzeln, also immer eine Zeile lesen und splitten, in eine Arrayzeile schreiben, dann die nächste Zeile...

trotzdem musst du die datei beim startup komplett einlesen und wieder schließen, während des gameloops machst du keine dateioperationen.

_________________
... machts gut und danke für den fisch ...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Sprung eines sprites simulieren
BeitragVerfasst: 05.04.2010 21:51 
Offline
Benutzeravatar

Registriert: 04.02.2008 16:51
ReadString() liest eine ganze Zeile von einer Datei aus. Mittels StringField() kannst du dann die einzelnen Zahlen auseinander Pflücken, da sie durch Leerzeichen getrennt sind. Dann kannst du sie wie du bereits weist mit Val() in richtige Zahlen umwandeln.

Beispiel:
Datei (Map.txt):
500 500 3
158 123 4
Code:
Code:
;Da PureBasic keine vorgefertige Struktur für
;dein Vorhaben hat, erstellen wir eine eigene.

Structure Object
;Die X und Y Position
X.l
Y.l
;und das Sprite, was später angezeigt werden soll
Sprite.l
EndStructure

;Wir erstellen als ein Array names Object, mit
;der Struktur Object.
Dim Object.Object(10)

;Jetzt öffnen wir unsere Datei
OpenFile(0,"Map.txt")

;Wir nutzen die Variable Pos, damit wir nicht alles
;ins erste Element des Arrays schreiben. Dann
;hätten wir nämlich nur ein Element.
Pos=0

  ;Wir lesen die Datei bis zum Ende aus
  While Not Eof(0)
  ;Wir lesen eine Zeile aus und speichern sie in
  ;der Variable String.
  String.s=ReadString(0)
 
  ;Hier passieren meherer Sachen aufeinmal.
 
  ;1) Wir nehmen uns eine Zahl aus der Zeile heraus
  ;   Die Zahlen sind über Leerzeichen getrennt,
  ;   deshalb können wir sie mit StringField()
  ;   voneinander trennen.
 
  ;2) Val() wandelt die Zahl (welche noch als
  ;   String vorliegen in eine richtige Zahl
  ;   (aus Sicht des Computers) um.
 
  ;3) Die Zahl wird dann unserem Objekt zugewiesen
  Object(Pos)\X=Val(StringField(String,1," "))
  Object(Pos)\Y=Val(StringField(String,2," "))
  Object(Pos)\Sprite=Val(StringField(String,3," "))
 
  ;Wir erhöhen Pos um eins damit wir das nächste
  ;Element beschreiben
  Pos+1
  Wend
CloseFile(0) 

;Hier noch ein kleines Testcode um zu prüfen ob alles
;richtig geladen wurde. Str() wandelt Zahlen übrigends
;wieder in Strings um.
;Mit dem Plus können wir dann zwei Strings verbinden.
;Debug gibt uns dann das Ergebnis aus (funktioniert
;mit Zahlen und Strings). Wenn wir das Programm ohne
;Debugger starten, oder eine Executetabelle  erstellen
;(Menü: Compiler --> Executetabelle erstellen...) wird
;Debug nicht mehr ausgegeben

  For a=0 To Pos-1
  Debug "Object"
  Debug "X: "+str(Object(a)\X)
  Debug "Y: "+str(Object(a)\Y)
  Debug "Sprite: "+str(Object(a)\Sprite)
  Next a


String:
Ein String ist eine Zeichenkette. Mann könnte auch einfach sagen eine Reihe von Buchstaben. Alles was ich hier schreibe ist ein String. In PureBasic erkennst du Strings daran, dass sie in Anfürungszeichen geschrieben werden. Natürlich kann man ins Strings auch ganz einfach Zahlen schreiben. Allerdings ist das nur für uns Menschen sinnvoll. Ein Computer kann mit einer Zahl in einem String erstmal nichts anfangen. Schreibst du etwas in einem Texteditor wird dies als String gespeichert.
Um Strings in PureBasic in Variabeln speichern zu können schreibt man entweder immer Name$ (Dollarzeichen) oder man schreibt .s hinter die Variable wenn man sie zum ersten mal benutzt.

Zahl/Integer:
Der Computer arbeitet mit einem anderen, für uns schwer lesbaren, Zahlensystem, das Binärssystem. Dass verbraucht deutlich weniger Speicher als ein String und damit kann der Computer sehr viel schneller rechnen. Wollen wir als Programmierer also eine Zahl für den Computer schreiben müssen wir sie ins Binärformat umwandeln. Im Programmcode macht PureBasic das automatisch, wenn du die Zahl nicht in Anführungzeichen setzt. Lesen wir aber später eine Zahl in unseren Zahlensystem aus (z. B. 1658) als String aus, müssen wir sie mit Val() ins Binärsystem umwandeln. Umgekehrt funktioniert das ganze mit Str().

Weitere Infos und Beispiele zu den Befehlen findest du in der PureBasic Hilfe welche du mit [F1] aufrufen kannst.

_________________
Windows XP: PB 4.31, PB 4.4, PB 4.51
Open Suse 11.2: PB 4.4


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Sprung eines sprites simulieren
BeitragVerfasst: 05.04.2010 21:59 
Offline
Benutzeravatar

Registriert: 15.09.2007 17:12
Wohnort: Irgendwo im Nirgendwo
Wenn ich das richtig verstehe, willst du deine Map also so aufbauen:

Zahl 1 = X-Koordinate
Zahl 2 = Y-Koordinate
Zahl 3 = Sprite

Also XYS XYS.

Hab mal was gebastelt, das Dateiformat sieht so aus:
Erste Zeile = Anzahl der Koordinaten in der nächsten Zeile
Zweite Zeile = Die Dreierkombi

Ist Vielleicht nicht die beste Lösung, aber sie läuft. <)
Code:
InitSprite()
InitKeyboard()

#Level = 0

Dim Level(25,19)

OpenScreen(800,600,32,"Test")

CreateSprite(1,32,32) ; Wir erzeugen zwei Sprites. Hier das Erste
  StartDrawing(SpriteOutput(1)) ;Auf das Sprite malen
    Box(0,0,32,32,RGB(200,100,0)) ;ne Box zeichnen
  StopDrawing() ; Und den Drawingblock schließen
 
CreateSprite(2,32,32) ; Hier das zweite
  StartDrawing(SpriteOutput(2)) ; das selbe wie oben nur auf das neue Sprite
    Box(0,0,32,32,RGB(0,100,200))
  StopDrawing()
 
;Jetzt lesen wir die Datei ein. Man muss einen eindeutigen Trenner haben,
;der die einzelnen Dreierkombis voneinander trennt. In diesem Fall Space.

If OpenFile(#Level,"Leveldaten.txt") ; Wenn das File geöffnet werden kann
  Anz = Val(ReadString(#level))
  Daten$ =  ReadString(#Level)
  For x = 1 To Anz ; alle Daten auslesen
    Coords$ = StringField(Daten$,x," "); Entsprechende Kombi auslesen
    Xcoord = Val(Mid(Coords$,1,1));Xkoordinate holen
    Ycoord = Val(Mid(Coords$,2,1));Ykoordinate holen
    Sprite = Val(Mid(Coords$,3,1)); Sprite holen
    Level(Xcoord,Ycoord) = Sprite ;Array-stelle zuweisen
  Next
EndIf 
 
  Repeat
 
    ClearScreen(0)
   
    For x = 0 To 24
      For Y = 0 To 18
        If level(x,y) > 0
          DisplaySprite(level(x,y),x*32,y*32)
        EndIf
      Next
    Next
   
    FlipBuffers()
   
    ExamineKeyboard()


Edit: Ok wenn es so gemeint war, wie Kswb73 gemeint hat, kannste meinen Code vergessen.^^

_________________
Ich verkaufe Rechtschreibfehler und jede menge GROßBUCHSTABEN. Alles unbegrenzt zu haben.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 16 Beiträge ]  Gehe zu Seite Vorherige  1, 2

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye