Objekt auf Kollision von oben prüfen

    • VB.NET

      Objekt auf Kollision von oben prüfen

      Hallo liebe Community-User,

      Da ich vor kurzem ein Problem mit einem Spielprojekt von mir hatte, und ich es bereits gelöst habe, poste ich auch hier einfach mal die Lösung ;)
      Es geht darum, eine Kollision die nur von oben kommt, abzufangen.
      Wenn man ein Spiel programmieren will, möchte man oft, dass wenn z.B ein Objekt von oben runterfällt, abgefangen wird.

      VB.NET-Quellcode

      1. Public Class Form1
      2. Dim objekt As New Rectangle(100, 100, 100, 100) '----1----
      3. Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
      4. e.Graphics.FillRectangle(Brushes.Black, objekt) '---2---
      5. End Sub
      6. End Class

      1) Zuerst legen wir ein Rechteck als Eigenschaft fest, damit wir es später verwenden können.
      2) Im Paint-Event zeichnen wir mit der Methode (Graphics) fillRectangle ein Rechteck.

      VB.NET-Quellcode

      1. Public Class Form1
      2. Dim objekt As New Rectangle(100, 100, 100, 100)
      3. Dim oldpos As New Point(0, 0) '---3---
      4. Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
      5. Dim spieler As New Rectangle(e.X, e.Y, 5, 5) '---4---
      6. If (spieler.IntersectsWith(objekt) And oldpos.Y < e.Y) Then '---5---
      7. MsgBox("berührt")
      8. End If
      9. oldpos = e.Location '---6---
      10. End Sub
      11. Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
      12. e.Graphics.FillRectangle(Brushes.Black, objekt)
      13. End Sub
      14. End Class


      3) Wir müssen noch eine Position festlegen, indem immer die ein zuvor vorgekommene Position gespeichert wird.
      4) Den Spieler (in diesem Fall die Maus) wird als Rectangle festgelegt, damit wir die intersectsWith(Rectangle r) verwenden können.
      *intersectsWith: Gibt einen boolischen Wert zurück, der angibt ob zwei Rechtecke sich kollisieren (berühren).
      5) Wie bereits erwähnt, wenn sich die beiden Rechtecke berühren und der alte Y-Wert kleiner als die jetzige ist, gibt es eine Kollision von oben.
      6) Falls dies nicht der Fall ist, wird die jetzige Position in die Eigenschaft oldPos gespeichert.

      Hoffentlich hat dieses Beispiel geholfen.
      Würde mich über Feedbacks freuen, viel Spaß :)