Re: Sprung eines sprites simulieren
Verfasst: 05.04.2010 18:59
Wie ist deine Datei denn aufgebaut?
Das deutsche PureBasic-Forum
https://www.purebasic.fr/german/
Code: Alles auswählen
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
Code: Alles auswählen
;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
Code: Alles auswählen
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()