Kollision auf Map

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Zaphod
Beiträge: 2875
Registriert: 29.08.2004 00:40

Beitrag von Zaphod »

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.
obar
Beiträge: 111
Registriert: 22.11.2007 19:47

Beitrag von obar »

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.

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 
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.
Antworten