Einfache 2D Kollisionsabfrage funktioniert nicht

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Wombe.

    Einfache 2D Kollisionsabfrage funktioniert nicht

    Hi,

    ich versuche mal aus Spaß ein kleines 2D Jump and Run zu programmieren.
    Für den Anfang habe ich einmal eine ganz einfache Kollisionsabfrage gebaut, habe hier aber schon ein Problem.
    Kann mir jemand helfen? Im Anhang hab ich mal einen Grundaufbau gehängt, wie ich mir das so grob vorstelle.

    THX

    Brainfuck-Quellcode

    1. Public Function Kollisionsabfrage(ByVal t1 As Control, ByVal t2 As Control) As Boolean
    2. Dim sx, sy As Boolean
    3. 'sx = t1.Left - Geschwindigkeit <= (t2.Left + t2.Width) And (t1.Left + t1.Width + Geschwindigkeit) >= t2.Left
    4. sx = t1.Left <= (t2.Left + t2.Width) And (t1.Left + t1.Width) >= t2.Left
    5. '------------- Hier fehlt noch Geschwindigkeit -------------------
    6. sy = (t1.Top + t1.Height) >= t2.Top And t1.Top <= (t2.Top + t2.Height)
    7. 'Wenn True findet Kollision der 2 Objekte statt
    8. Kollisionsabfrage = sx And sy
    9. End Function
    10. Public Function Bewegung(ByVal Wagerecht As Integer, ByVal Senkrecht As Integer)
    11. 'a und bb wird nur als Zähler verwendet und ist nur in dieser Sub deklariert
    12. Dim a As Integer
    13. Do While a < AnzObjArray
    14. 'Hier trifft der Player auf ein Hindernis
    15. If Kollisionsabfrage(Mann, Hans(a)) = True Then
    16. Dim bb As Integer = 0
    17. 'Alles wieder eins in die andere Richtung bewegen
    18. Do While bb < AnzObjArray
    19. Hans(bb).location = New Point(Hans(bb).location.X + Wagerecht, Hans(bb).location.y)
    20. bb = bb + 1
    21. Loop
    22. Else
    23. 'Bewegung wenn keine Kollision statt findet
    24. Hans(a).location = New Point(Hans(a).location.X - Wagerecht, Hans(a).location.y)
    25. a = a + 1
    26. End If
    27. Loop
    28. End Function
    Dateien
    • _MeinSpiel1.rar

      (64,38 kB, 130 mal heruntergeladen, zuletzt: )

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Wombe“ ()

    also das hauptproblem besteht ja darin, dass es eine kollision gibt, sobald der spieler auf ein hindernis trifft.
    wenn ich den spieler nun in die andere richtung bewegen will (bzw. der spieler wird ja nie bewegt, sondern das level [array] in die entgegengesetzte richtung) gibt es halt immernoch eine kollision, da der spieler direkt am hindernis steht.
    irgendwie muss ich dem klar machen, dass in die richtung, wo das hindernis nicht ist, die bewegung ok ist und keine kollision statt findet >_<.
    ja danke für den ansatz aber dein ansatz ist nicht der gewesen, den ich gebraucht hab. du bewegst den player und nicht die ganze welt. außerdem funktioniert dein ansatz auch nur in eine richtung und nicht in beide.
    meine kollisionsabfrage hat einige probleme, ich muss die mal komplett neu überdenken X(

    gruß