Kollision funktioniert nicht

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Kollision funktioniert nicht

    Hallo Leute.

    Bin mir nicht sicher ob das hier her gehört, aber ich nehm an dass es noch was mit den Grundlagen zu tun hat.

    Also,

    Ich prog grad n kleines Jump and Run Game. Meine Figur (30x30) kann springen (fällt auch wieder hinunter), stirbt bei einer Falle und kann natürlich links und rechts gehen mit abwechselnden Bildern. Wenn ich jetzt auf einen anderen Boden raufspringe auf dem die Figur bleiben soll, fällt sie leider hinunter.

    Hab es mal mit nem Timer versucht.

    Coding:

    VB.NET-Quellcode

    1. Private Sub Boden3Timer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Boden3Timer.Tick
    2. If Figur.Left >= Boden3.Left And Figur.Bottom <= Boden3.Top And Figur.Right <= Boden3.Right Then
    3. Figur.Top = 180
    4. End If
    5. End Sub



    Wie gesagt, bleibt er nicht auf dem Boden, sondern fällt hinunter und zwar direkt in die Falle und stirbt.
    Wenn ich statt "Figur.Bottom <= Boden3.top", "Figur.bottom >= Boden3.top" schreib, hauts zwar hin, aber er kann dann natürlich ohne dass ich die Pfeiltaste nach oben drücke auf den Boden rauf, da wenn ich unten vorbei gehe nen größeren top habe und somit ist die Location.y dann sofort 180.

    Vielleicht habt ihr ne Lösung und ich hoffe ich hab alles ausführlich erklärt so dass ihr mich verstanden habt.

    Mfg Devilos
    ich würds deutlich anders lösen.
    Es gibt die tolle Funktion "Rectangle.IntersectsWth()"
    Beispiel:

    VB.NET-Quellcode

    1. Dim tect As New Rectangle(0, 0, 100, 100)
    2. If text.IntersectsWith(new Rectangle(10, 10, 3, 3)) Then
    3. 'Wird sicherlich True ergeben, da das innere Rechteck im äußeren ist
    4. Else
    5. ' Wird niemals vorkommen, bei dem Code oben
    6. End If

    ansonsten lesestoff:
    msdn.microsoft.com/de-de/libra…em.drawing.rectangle.aspx
    und wie du alles abfragst:

    VB.NET-Quellcode

    1. For x = 0 To ListOfAlleDingeDieAufDerFormSind
    2. If Not ListOfAlleDingeDieAufDerFormSind(x).IntersectsWith(new Rectangle(Position1, Position2, 30, 30)) Then
    3. 'Bewegen
    4. Else
    5. 'Rückwärtsbewegen
    6. End If
    7. Next
    wenn ich ehrlich bin, kapier ich nicht ganz was du meinst.

    Aber irgendwie muss das doch auch mit dem Timer funktionieren oder? Hab keine Ahnung was ich da falsch haben sollte.
    Hat noch jemand ne leichtere Variante oder kann wer die Variante von AliveDevil für Noob Programmierer erklären? ;)

    Mfg Devilos
    Mal Dir doch mal Deine Spielsituation auf ein Blatt Papier und schreib Dir die korrekten Werte dram. Dann setzt Du an der If-Zeile einen Haltepunkt (F9) und vergleichst die einzelnen Werte.
    So wirst Du den Fehler sehr schnell finden.
    Übrigens, Mach es so:

    VB.NET-Quellcode

    1. If (Figur.Left >= Boden3.Left) AndAlso (Figur.Bottom <= Boden3.Top) AndAlso (Figur.Right <= Boden3.Right) Then
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!