Tile Map mit Drag

  • VB.NET
  • .NET (FX) 4.5–4.8

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

    Tile Map mit Drag

    Moin zusammen,

    ich stehe vor einem Problem, bei dem ich nicht weiter komme. Ich muss eine 2D Map in einen Tile Mapeditor packen und dementsprechend zoomen, Koordinaten kennzeichnen usw...
    Mir ist klar das Forms nicht gut dafür ist, trotzdem möchte ich das mit Forms realisieren.
    Hier mein Problem:

    Die Tile Map zu erstellen ist ja kein Problem, ich kriege das Drag and Drop nicht hin.
    Hier der Source vom Laden:

    VB.NET-Quellcode

    1. Private Sub p_MouseMove(ByVal sender As Object, ByVal e As MouseEventArgs)
    2. Debug.WriteLine(e.X.ToString & e.Y.ToString)
    3. End Sub
    4. Private Sub Form1_Load_1(sender As Object, e As EventArgs) Handles MyBase.Load
    5. Dim tileWidth As Integer = 30
    6. Dim tileHeight As Integer = 30
    7. Dim tileRows As Integer = 60
    8. Dim tileCols As Integer = 60
    9. Using sourceBmp As Bitmap = New Bitmap("C:\cc\mapeditor\basic.jpg")
    10. Dim s As Size = New Size(tileWidth, tileHeight)
    11. Dim destRect As Rectangle = New Rectangle(Point.Empty, s)
    12. For row As Integer = 0 To tileRows - 1
    13. For col As Integer = 0 To tileCols - 1
    14. Dim p As PictureBox = New PictureBox()
    15. p.Size = s
    16. Dim loc As Point = New Point(tileWidth * col, tileHeight * row)
    17. Dim srcRect As Rectangle = New Rectangle(loc, s)
    18. Dim tile As Bitmap = New Bitmap(tileWidth, tileHeight)
    19. Dim G As Graphics = Graphics.FromImage(tile)
    20. G.DrawImage(sourceBmp, destRect, srcRect, GraphicsUnit.Pixel)
    21. p.Image = tile
    22. p.Location = loc
    23. p.Tag = loc
    24. p.Name = String.Format("Col={0:00}-Row={1:00}", col, row)
    25. Me.Controls.Add(p)
    26. Next
    27. Next
    28. End Using
    29. End Sub


    Kann mir dabei jemand helfen? Wäre super!
    ~Wir leben zwar alle unter dem gleichen Himmel, aber es haben nicht alle den gleichen Horizont~
    @razzzer530i Was soll denn passieren?
    Mach doch das ganze mal ein 1x1-Tile-Map im Designer und sieh Dir an, was in der Prozedur InitializeComponents() in der FormX.Designer.vb steht.
    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!
    Vielen Dank,

    leider bin ich meinem Ziel nicht näher gekommen.

    Ich benötige nur die Möglichkeit ein Panel mit der Maus innerhalb eines zweiten Panels zu bewegen, ohne dass ich dabei die MouseEvents der inneren Pictureboxen abgreife. Das funktioniert nicht und ich finde die Lösung einfach nicht.
    ~Wir leben zwar alle unter dem gleichen Himmel, aber es haben nicht alle den gleichen Horizont~
    @razzzer530i Wenn ich Dich richtig verstehe: So geht das nicht.
    Ich nehme mal an, Du willst das innere Panel mit der Maus anfassen und dann schieben.
    Dazu brauchst Du die MouseEvents Down und Move des inneren Panels:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private x As Integer
    3. Private y As Integer
    4. Private Sub Panel1_MouseDown(sender As Object, e As MouseEventArgs) Handles Panel1.MouseDown
    5. x = Control.MousePosition.X - Panel1.Location.X
    6. y = Control.MousePosition.Y - Panel1.Location.Y
    7. End Sub
    8. Private Sub Panel1_MouseMove(sender As Object, e As MouseEventArgs) Handles Panel1.MouseMove
    9. If e.Button = MouseButtons.Left Then
    10. Dim newpoint = Control.MousePosition
    11. newpoint.X -= x
    12. newpoint.Y -= y
    13. Panel1.Location = newpoint
    14. End If
    15. End Sub
    16. End Class
    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!