@GPM
Dein Kollisionstest hat mir weitergeholfen, Danke. Aber ich hab jetzt mal probiert das ganze per Tastatur Steuerung zu machen und den Kollisions test zu erweitern. Nur bin ich jetzt leider auf das Problem gestoßen, dass bei höheren Pixel Sprüngen(Geschwindigkeit) manche Kollisionstests nicht mehr Klappen, weil (wie ich glaube) sie übersprungen werden.
Hier der Code:
Public Class Form1
Dim figur1 As New Rectangle(50, 50, 20, 20)
Dim figur2 As New Rectangle(0, 0, 20, 20)
Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As _
Integer
Dim geschwindigkeit As Integer = 1
Private Sub Form1_Paint(ByVal sender As Object, ByVal e As _
System.Windows.Forms.PaintEventArgs) Handles Me.Paint
e.Graphics.FillRectangle(Brushes.Blue, figur1)
e.Graphics.FillRectangle(Brushes.Red, figur2)
End Sub
Private Function Kollisionstest(ByVal r1 As Rectangle, ByVal r2 As _
Rectangle) As Int32
If r2.Contains(r1.X, r1.Y + r1.Height - 1) Or r2.Contains(r1.X, r1.Y + _
1) Then Return 1
If r2.Contains(r1.X + r1.Width - 1, r1.Y) Or r2.Contains(r1.X + 1, _
r1.Y) Then Return 2
If r2.Contains(r1.Right, r1.Y + r1.Height - 2) Or r2.Contains(r1.Right, _
r1.Y + 1) Then Return 3
If r2.Contains(r1.X + r1.Width - 1, r1.Bottom) Or r2.Contains(r1.X + 1, _
r1.Bottom) Then Return 4
Return 0
End Function
'Test ohne Richtung
Private Function IsKollision(ByVal r1 As Rectangle, ByVal r2 As Rectangle) _
As Boolean
Return r1.IntersectsWith(r2)
End Function
Private Sub bewegung()
If (GetAsyncKeyState(38)) Then
'' s = False
If Kollisionstest(figur1, figur2).ToString = 4 Then
Else
figur2.Y -= geschwindigkeit
End If
End If
If (GetAsyncKeyState(40)) Then
'' w = False
If Kollisionstest(figur1, figur2).ToString = 2 Then
Else
figur2.Y += geschwindigkeit
End If
End If
If (GetAsyncKeyState(37)) Then
'' d = False
If Kollisionstest(figur1, figur2).ToString = 3 Then
Else
figur2.X -= geschwindigkeit
End If
End If
If (GetAsyncKeyState(39)) Then
'' a = False
If Kollisionstest(figur1, figur2).ToString = 1 Then
Else
figur2.X += geschwindigkeit
End If
End If
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles Timer1.Tick
Call bewegung()
Me.Text = Kollisionstest(figur1, figur2).ToString
Me.Invalidate()
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles MyBase.Load
MyBase.DoubleBuffered = True
End Sub
End Class |