problem mit tiles
Übersicht

QuäinyBetreff: problem mit tiles |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Dort wo du die map einliest (und wo meiner Vermutung nach auch der fehler kommt) einfach nur bis 5 zählen, statt bis 6 ![]() (0-6 wären 7 Elemente!) mfG, Christoph. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group