In einem Isometrischen Grid, die Teils anwählen ?

  • VB.NET

Es gibt 30 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    In einem Isometrischen Grid, die Teils anwählen ?

    moin com.
    Hätte ne frage zu einem Isometrischen Grid und zwar: Wie kann man bei so einem Raster die einzelnen Teile anwählen?
    Hab jetzt schon des öfteren nach gesucht (Google, VB-P, etc.) aber nix gefunden :/

    Bin für jeden Gedankenanstos dankbar ;)
    Wie soll man aber anhand der Maus position das richtiege Feld herausfinden ?
    und ein Isometrisches Raster hat nix mit nem Zweidimensionalen Array zutuhn (außer vlt. das ablagern der Daten des Tiles), jedenfalls nicht viel mit der Erkennung ob das Teil unter der Maus liegt.
    Hey,

    ich hab jetzt nicht die grosse Ahnung, was ein isometrisches Grid genau ist. Die einzelnen Tiles sind doch Rectangle-Objekte oder nicht?
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    ich vermute mal du kannst dieses Grid auch zeichnen lassen...
    Nun das lässt sich ja wohl sicher mit zwei dreiecken darstellen für jedes Feld, somit musst du nur noch nach dreieckskollision gucken(Dreieck- Strahl o.ä.) reicht ja sogar 2D und dann auf Kollision prüfen...

    Sicher lässt sich das auch noch anderst lösen(vmtl. performanter und einfacher), einfach etwas nachdenken, ist alles Mathematik und Logik...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Ich kann Dir nur soweit nen Rat geben, dass jedes Rectangle-Object eine Contains()-Funktion bereitstellt, die eine Location als Parameter annimmt. So kannst Du bestimmen, welches Rectangle unter der Maus liegt.

    Beispielcode. Keine Garantie auf Richtigkeit oder sonst was.

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private _listRects As New List(Of Rectangle)
    3. Private Sub Form1_MouseMove(sender As System.Object, e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseMove
    4. For Each r As Rectangle In _listRects
    5. If r.Contains(e.Location) Then
    6. MessageBox.Show("huhu")
    7. End If
    8. Next
    9. End Sub
    10. Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    11. Dim rnd As New Random(Now.Millisecond)
    12. For i As Integer = 0 To 20
    13. Dim locX As Integer = rnd.Next(0, Me.Width)
    14. Dim locY As Integer = rnd.Next(0, Me.Height)
    15. Dim r As New Rectangle(locX, locY, 100, 100)
    16. _listRects.Add(r)
    17. Next
    18. End Sub
    19. Private Sub Form1_Paint(sender As Object, e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
    20. For Each r As Rectangle In _listRects
    21. e.Graphics.DrawRectangle(Pens.Blue, r)
    22. Next
    23. End Sub
    24. End Class
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Ein isometrisches Raster hat alles mit einem zweidimensionalen Array zu tun, es sei denn, du machst irgendetwas falsch.
    Es besteht auch nur aus x Kacheln in der X- und Y-Achse, die man entsprechend ansprechen kann. Und deine Vorgehensweise, die Kacheln, die schräg angeordnet sind, mit Rectangles zu beschreiben, ist Schrott.
    warum machst du nicht einfach mal was ich gesagt habe?
    Entweder das vorgekaute, was man zumindest näherungsweise auf beliebige Formen und auf eckige Formen allemal anwenden kann, oder das Entwickeln eines eigenen Algos, was bei solch regelmäßigen Formen mit dem Mathe Stoff 7te Klasse machbar sein sollte
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Deine methode klingt zwar gut aber ich würde auch gerne die von Samus Aran genauer "betrachten" um die Performantere herauszufinden.
    Hatte mal mit nem YouTuber, der das schon Hinbekommen hat, über eine methode geredet in der man immer den Abstand zu der mitte aller Teile Berechnet, der kürzeste abstand war dann das Teil über dem sich die Maus befindet
    ich weiß noch nicht, wie ich mir ein "isometrisches Grid" vorstellen soll.
    Das Bildchen zeigt einen Quader - dargestellt durch 3 Parallelogramme.

    Bei einem Grid denke ich aber an mehr Zellen als an nur 3.

    Ausserdem denke ich beinem Grid an Zeilen und Spalten, aber beinem wilden Rautenmuster wären Zeilen und Spalten als Zugriffs-Indizees wohl hinfällig.
    Bei nur wenigen Zellen könnteman was mit GraphicsPath.Contains(point) reißen, bei vielen Zellen weißichgarnicht, in welcher Daten-Form dieses fabelhafte Grid im Speicher gehalten wird.
    Von daher auch keine Möglichkeit, sich einen Contains(point) Algo auszudenken.
    Langsam frag ich mich ob Hier überhaupt wer Technisches Zeichnen in der Schule hatte
    Isometrisch is in 30° winkel gezeichnet.
    Es is in Spielen wie Rolercoaster Tycoon 1 und 2 oder auch in Open Transport Tycoon und auch ein paar neueren spielen forhanden :)
    Ich hatte das selbe Problem auch schon. Du kannst ein so ein isometrisches Teilchen als Rechteck beschreiben und dann, wie in einer normalen Tilemap, gucken, in welchem die Mausposition liegt. Da aber es sein kann, dass 2 betroffen sind, musst du das Nehmen, was den kürzeren Abstand vom Mauszeiger zu dem Mittelpunkt oder ähnlichem hat. Das machste mitm Satz des Pythagoras oder anderes.