Pixelweise Bewegung mit kollision
Übersicht

TanatosBetreff: Pixelweise Bewegung mit kollision |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich habe mich mal an der Pixel by Pixel Bewegung + kollision versucht allerdings funktioniert das ganze ein wenig sonderbar... aber schaut es euch selbst am besten mal an:
Code: [AUSKLAPPEN] Const XMAX=640 Const YMAX=480 Const ESC=1 Const AUF=200 Const AB=208 Const LINKS=203 Const RECHTS=205 Const TILESIZE=20 Global posx=2*20 Global posy=18*20 Dim map(19,19) Restore level For y=0 To 19 For x=0 To 19 Read map(x,y) Next Next Graphics XMAX,YMAX,0,2 SetBuffer BackBuffer() Repeat drawmap() moveplayer() Flip Cls Until KeyHit(ESC) End Function moveplayer() If KeyDown(AUF) And map(posx/20,posy/20-1)=0 Then posy = posy - 1 If KeyDown(AB) And map(posx/20,posy/20+1)=0 Then posy = posy + 1 If KeyDown(LINKS) And map(posx/20-1,posy/20)=0 Then posx = posx - 1 If KeyDown(RECHTS) And map(posx/20+1,posy/20)=0 Then posx = posx + 1 Color 125,0,0 : Oval posx,posy,TILESIZE,TILESIZE End Function Function drawmap() For y=0 To 19 For x=0 To 19 If map(x,y)=0 Then Color 0,0,0 : Rect x*TILESIZE,y*TILESIZE,TILESIZE,TILESIZE If map(x,y)=1 Then Color 255,255,255 : Rect x*TILESIZE,y*TILESIZE,TILESIZE,TILESIZE Next Next End Function .level Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 Data 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 Data 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 Data 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 Data 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 Data 1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1 Data 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 Data 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 Data 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 Data 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 Data 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 Data 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 Data 1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1 Data 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 Data 1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 Data 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 Data 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 Data 1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1 Data 1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1 Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ich hoffe ich hab mich hier nicht total blöd angestellt aber mir ist auf meiner suche noch kein tutorial zur pixelweisen bewegung mit kolision begegnet welches ich komplett verstanden habe ![]() |
||
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] Function moveplayer()
u=map((posx+10)/20,posy/20)=0 d=map((posx+10)/20,(posy+20)/20)=0 l=map(posx/20,(posy+10)/20)=0 r=map((posx+20)/20,(posy+10)/20)=0 If KeyDown(AUF) And u Then posy = posy - 1 If KeyDown(AB) And d Then posy = posy + 1 If KeyDown(LINKS) And l Then posx = posx - 1 If KeyDown(RECHTS) And r Then posx = posx + 1 If Not d tempy=posy/20 posy=tempy*20 EndIf Color 125,0,0 : Oval posx,posy,TILESIZE,TILESIZE End Function Für das "aufs Tile stellen" bei Kollision unten ist der Code mit dabei, für die anderen 3 Seiten dürftest Du keine Probleme haben es anzupassen, wenn die Mathematik und "rechnen mit Integern-Sache" klar ist ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
Tanatos |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Vielen Dank für die schnelle Antwort, aber leider hab ich das Gefühl, dass die Sache mit der Intergerrechnung doch nicht so klar ist. ![]() Mathematik war schon immer mein Problem, irgendwie brauch ich dabei immer ein bischen länger. Ich würd mich riesig freuen wenn sich jemand die Zeit nehmen könnte und mir die Sache mal ausführlich erklärt. ![]() Code: [AUSKLAPPEN] u=map((posx+10)/20,posy/20)=0
d=map((posx+10)/20,(posy+20)/20)=0 l=map(posx/20,(posy+10)/20)=0 r=map((posx+20)/20,(posy+10)/20)=0 Dass durch die Tilesize-Größe geteilt werden muss hab ich ja verstanden aber die restliche Rechnung ist mir noch ein wenig zu hoch. Was mir auch Kopfzerbrechen bereitet ist dieser Teil: Code: [AUSKLAPPEN] If Not d
tempy=posy/20 posy=tempy*20 EndIf Wenn ich zuerst durch 20 dividiere und anschließend wieder mit 20 multipliziere kommt doch wieder der Anfangswert raus oder hab ich mich da vertan? |
||
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: Wenn ich zuerst durch 20 dividiere und anschließend...
Theoretisch ja, der Gadankengang ist nicht so verkehrt. Nur ist für den Computer eine Zahl nicht dasselbe wie für Dich ![]() Code: [AUSKLAPPEN] ; Für posy nehme ich den Wert 128 an:
tempy=posy/20 ; tempy=128/20 == 6.4 -> rundet Blitz zu 6 posy=tempy*20 ; posy=6*20 == 120 -> Position genau über dem Tile Das addieren der halben Spielergröße zur X bzw. Y-Position hat einzig den Zweck die Kollision in der Mitte der Spielfigur zu haben (der Bezugspunkt der Grafik ist ja oben links). Das addieren der ganzen Spielergröße wird benötigt wenn die Kollision an den "Füssen" oder rechts der Figur rauskommen soll, weil ja, wie schon gesagt, der Bezugspunkt der Grafik oben links ist ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group