vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Brandneu! sevEingabe v3.0 - Das Eingabecontrol der Superlative!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Fortgeschrittene
Re: Zu Komplizirte kollision? 
Autor: Zerod
Datum: 04.03.09 21:02

@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
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Zu Komplizirte kollision?1.293Zerod02.03.09 23:29
Re: Zu Komplizirte kollision?959GPM03.03.09 01:19
Re: Zu Komplizirte kollision?768Micke03.03.09 12:58
Re: Zu Komplizirte kollision?784Zerod04.03.09 21:02
Re: Zu Komplizirte kollision?819GPM05.03.09 02:51

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel