Rectangle.Intersectswith in einer schleife....

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Lockerzzz.

    Rectangle.Intersectswith in einer schleife....

    Hey,

    arbeite an einem kleinen Spiel, wo man Häuser platzieren kann. DIe positionen der Häuser werden in einer List of rec gespeichert, sodass ich abfragen kann ob die Maus drüber ist.

    Der Code:
    mrec ist das rectangle des mauszeigers, deklarier ich so:

    VB.NET-Quellcode

    1. mrec = new rectangle(e.x, e.Y, 1 , 1)
    2. 'Dann die Abfrage im MouseMove Event, osb eine Kollision gibt oder nicht:
    3. For i = 1 To reclist.Count - 1
    4. If mrec.IntersectsWith(reclist(i)) Then
    5. Me.Cursor = Cursors.Hand
    6. Else
    7. Me.Cursor = Cursors.Default
    8. End If
    9. Next


    Das Problem dabei: das ganze funtz immer nur beim letzten platzierten Haus. Manchmal, wenn ich über ein anderes Haus geh, dann flackert der Mauszeiger ein bisschen und wird zur Hand, aber nur für eine 100stel Sekunde oder so.

    Was ist daran falsch?

    Danke schon mal.
    Jap:

    currentbuilt ist ein string, weil ich versch. Arten von Häusern bau.
    gutxlist speichert die xKoords und hutylist die ykoords der häuser. die werden dann im paint event gemalt ;)
    rec ist das rectangle, wo das haus ist. Das wird dann einfach zur reclist hinzugefügt.

    VB.NET-Quellcode

    1. Private Sub Form1_MouseClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseClick
    2. If Not currentbuilt = "none" Then
    3. Select Case currentbuilt
    4. Case "hut"
    5. hutxlist.Add(xmouse)
    6. hutylist.Add(ymouse)
    7. rec = New Rectangle(xmouse, ymouse, 95, 95)
    8. reclist.Add(rec)
    9. currentbuilt = "none"
    10. End Select
    11. End If
    12. If Me.Cursor = Cursors.Hand Then
    13. MsgBox("Das ist ein Haus")
    14. End If
    15. End Sub



    Niemand, der mir helfen kann??..

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Lockerzzz“ ()

    Du musst die Schleife dann natürlich auch verlassen. Und warum beginnt die Schleife mit Index = 1?

    VB.NET-Quellcode

    1. For i = 0 To reclist.Count - 1
    2. If mrec.IntersectsWith(reclist(i)) Then
    3. Me.Cursor = Cursors.Hand
    4. Exit For
    5. Else
    6. Me.Cursor = Cursors.Default
    7. End If
    8. Next