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