problem mit tiles

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Quäiny

Betreff: problem mit tiles

BeitragDi, Apr 29, 2008 18:56
Antworten mit Zitat
Benutzer-Profile anzeigen
hab das rpg2 tutorial von robsite.de ein wenig umgeändert und meine tiles eingebaut. der fehler muss irgendwo bei data liegen, wiel er sagt:"out of data"Danke schon im vorraus
Code: [AUSKLAPPEN]
;RPG-Tutorial2 Kollision auf einer Tilemap

;dießmal muss ich darauf hinweisen, dass es viele rechtschreibfehler gibt,
;da ich unter Zeitdruck stand.


;EINLEITUNG

;Dieses tutorial behandelt ein sehr wichtiges Thema, und zwar die kollisionsabfrage,
;auf einer Tilemap. Also wenn ihr das Programm startet werdet ihr eine Figur sehen,
;die ihr mit den Pfeiltasten bewegen könnt. Ihr denkt sicher "Oh, das weiß ich schon,
;tschüss!!!",DASS lasst ihr bleiben!!!! Auf dieser karte von mir
;gibt es nämlich die passierbaren tiles(sand,wiese) und die unpassierbaren(feuer,wasser),
;aber wie bringe ich die Figur von mir nur dazu vor einem Tile stehen zu bleiben?????
;Das ist ganz einfach: "Bisher haben wir unsere array in die variablen(x und y) gespeichert
;aber damit kann man halt nur die die map malen aber ich will eine kollision,
;also nehmen wir zwei weitere variablen und zwar (px und py) diese beiden stehen für die
;position des spielers  "px = waagerecht / py = senkrecht" nach dem mir klar geworden war,
;das ich jetzt eine figur in zwei andere variablen speichern muss, fange ich mal an es euch
;richtig zu erklehren.
;eine einfache bewegung der figur(if keydown(200) then )
;HMMM...., da fehlt aber was denkt ihr sicher und das ist auch richtig "wo ist die kollisionsabfrage
;und die Bewegung"??? Dazu machen wir erst mal einen einfachen If-satz  (If map(px,py+1) < 2 Then ...)
;Naja, wie erklehre ich dass??? mit diesem satz werden die px und py variablen in die map-array
;gesetzt, obwohl sie damit noch nicht gespeichert sind. (<2) ist ganz einfach, das
;tile auf der position px,py+1 < dem 2.auf der bitmap ist geht der if erst weiter....
;So ist es ein bischen schwer zu erklehren, gehen wir einfach mal zum programm.



;CODE


Graphics 800,600

;tileset
tileset = LoadAnimImage("tiles.bmp",16,25,0,2)
;figur
char = LoadImage("ichkleinformat5.bmp")

;px Variable des Spielers
px = 5
;py Variable des Spielers
py = 5
;Direckt move = 1 damit die Figur auch am Anfang sichbar ist
move = 1

;die map-array
Dim map(6,6)

;die Karte
; 0 = teppich
; 1 = tapette



Data 0,0,0,0,0,0
Data 0,0,0,0,0,0
Data 0,0,1,1,0,0
Data 0,0,1,1,0,0
Data 0,0,0,0,0,0
Data 0,0,0,0,0,0




;einlesen und die zahlen der Tiles in der array speichern
For y = 0 To 6
For x = 0 To 6
Read map(x,y)
Next
Next

Repeat
SetBuffer BackBuffer()
Cls
If KeyDown(1) Then End

;malt die karte. Die auf der map gespeicherten zahlen einfach als framezahl des tilesets nehmen 
For y = 0 To 6
For x = 0 To 6
DrawBlock tileset,x*16,y*25,map(x,y)
Next
Next

;einfach wenn tastendruck dann
If KeyDown(208) Then
;wenn die position des spielers (px,py+1) mit einem tile kollidiert, dass in der array einen höeren
;wert als 2 hat geht der if-satz nicht weiter und die figur bleibt stehen 
;die 2 ist gleichzeitig das frame des tilesets
If map(px,py+1) <1 Then
;die figur wird um ein tile bewegt
py = py + 1
;überträgt die spielerkoordinaten auf die x und y variablen der map und malt unsere figur
move = 1
End If
End If

If KeyDown(200) Then
If map(px,py-1) < 1 Then
py = py - 1
move = 1
End If
End If

If KeyDown(203) Then
If map(px-1,py) < 1 Then
px = px - 1
move = 1
End If
End If

If KeyDown(205) Then
If map(px+1,py) < 1 Then
px = px + 1
move = 1
End If
End If


;wenn move = 1 dann übertrage x auf px*32(*32 da die array so klein ist bei *1 oder *2 kommt schnell
;(array index out of bouds) und das wollen wir nicht wenn die koordinaten des spielers mit den
;koordinaten der map in verbindung gebracht worden sind, malen wir die figur
;auf der position x,y wir wollen die figur ja mit der map kollidieren lassen und nicht mit dem Nichts
;und da die map nun mal in die x und y koordinaten gespeichert wurden müssen wir das auch so
;berücksichtigen.
If move = 1 Then x = px * 16: y = py * 25:DrawImage char,x,y


Flip
Forever













;Heute habe ich nur wenig geschrieben, weil ich nur ein kurzes Thema beschrieben habe
;ich könnte auch mehr schreiben, aber da muss mir erst mal jehmand einen Vorschlag
;machen, was ich schreiben soll(z.B. ihr stellt eine bestimmte frage, die ich in der nächsten
;ausgabe beantworte....aber keine zu schweren bitte :-)


;Vorschläge und Fragen bitte an: BlitzBasicUser@aol.com 

Eingeproggt

BeitragDi, Apr 29, 2008 19:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Dort wo du die map einliest (und wo meiner Vermutung nach auch der fehler kommt) einfach nur bis 5 zählen, statt bis 6 Smile

(0-6 wären 7 Elemente!)

mfG, Christoph.

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group