Wenn du eine Kollision Feststellst reicht es, das Sprite an den nächsten erlaubten Wert zu setzen. Wenn dein Spieler also grade dabei war nach oben zu laufen und er kommt auf ein verbotenes Feld, dann weist du, dass seine Position dann Felder*50+1Pixel auf der Karte ist. Wenn du das so machst, dann sollte auch nichts zappeln.
Ein weiteres Problem das ich sehe ist, dass du die Spielergröße für jedes Frame betrachtest... das kann zu einem großen Problem werden, wenn die einzelnen Animationsframes wirklich unterschiedlich groß sind. Es spricht prinzipiell erstmal nichts dagegen, dass die Frames unterschiedlich groß sind, aber der Spieler sollte von seiten der Spiellogik eine feste größe haben, sonst wirst du arge Probleme bekommen.
Kollision auf Map
Hallo zusammen,
hab nun die Kollision eingebaut. Läuft eigentlich gut.
Jetzt hab ich aber noch ein Problem.
Ich habe eine Test-Map die 32 Tiles breit ist und 12 hoch. Tiles sind 50x50
dargestellt werden 16 in der Breite. Dass heisst, wenn ich nach rechts laufe und an den Maprand komme wird die nächste Seite aufgebaut.
Ich springe also gleich 16 Tiles nach rechts. Dies funz ebenfalls. Wenn ich nun aber weiter nach rechts gehe, also wieder an den Maprand, stürzt Programm ab, weil Array zu klein ist.
Kann sich jemand mal den Code anschauen und sagen was ich falsch mache.
Wenn jemand noch Lust hat könnte er Bitte auch mal schauen ob die Kollisionsabfrage so in Ordnung ist.
hab nun die Kollision eingebaut. Läuft eigentlich gut.
Jetzt hab ich aber noch ein Problem.
Ich habe eine Test-Map die 32 Tiles breit ist und 12 hoch. Tiles sind 50x50
dargestellt werden 16 in der Breite. Dass heisst, wenn ich nach rechts laufe und an den Maprand komme wird die nächste Seite aufgebaut.
Ich springe also gleich 16 Tiles nach rechts. Dies funz ebenfalls. Wenn ich nun aber weiter nach rechts gehe, also wieder an den Maprand, stürzt Programm ab, weil Array zu klein ist.
Code: Alles auswählen
If KeyboardPushed(#PB_Key_Right)
If AnimFrame > 118 And AnimFrame <= 122
If playerX < 800 - SpriteWidth(AnimFrame)
If map(Int(MapX+((playerX+2+SpriteWidth(AnimFrame))/50)), Int(MapY+((playerY)/50))) < 10 And map(Int(MapX+((playerX+2+SpriteWidth(AnimFrame))/50)), Int(MapY+((playerY+(SpriteHeight(AnimFrame)/2))/50))) < 10 And map(Int(MapX+((playerX+2+SpriteWidth(AnimFrame))/50)), Int(MapY+((playerY+SpriteHeight(AnimFrame))/50))) < 10
playerX + 2
EndIf
counter + 1
If counter > 2
AnimFrame + 1
If AnimFrame = 123
AnimFrame = 119
EndIf
counter = 0
EndIf
ElseIf MapX < 16
MapX + 16
playerX = 0
EndIf
Else
AnimFrame = 119
EndIf
EndIf
Wenn jemand noch Lust hat könnte er Bitte auch mal schauen ob die Kollisionsabfrage so in Ordnung ist.