Kacheln für Leveleditor

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von ~blaze~.

    Kacheln für Leveleditor

    Hi,

    ich sitze gerade an einem LevelEditor, mir ist aufgefallen wenn ich
    Kacheln in der Form hätte wäre das editieren viel einfacher.

    Hat jemand eine Idee wie man solche Kacheln programmiert?

    Edit:

    Wer den RPG Maker kennt, weiß was ich meine, dort sind auch solche
    Kästen vorgegeben.
    Du meinst ein Raster?

    VB.NET-Quellcode

    1. Private Fields(5,5) As String
    2. Private Sub PictureBox1_OnClick(sender As Object, e As MouseEventArgs) Handles PictureBox1.MouseDown
    3. Dim x As Integer = (e.X - e.X Mod 100) / 100
    4. Dim y As Integer = (e.Y - e.Y Mod 100) / 100
    5. Fields(x,y) = "Hier etwas hinbauen"
    6. End Sub


    Anstelle von 100 musst du noch die Blockbreite bzw. -Höhe angeben.
    Hi
    @Thilo87:

    VB.NET-Quellcode

    1. Dim x As Integer = (e.X - e.X Mod 100) / 100

    Option Strict sollte bei dir auf Off sein. /100 erzeugt kein Integer, sondern ein Double. Korrekt wäre \ statt /, dann würdest du eine Integer-Division durchführen, der Rest wird einfach entfernt. Ansonsten könntest du auch einfach (e.X \ 100) * 100 rechnen.
    Es wäre allerdings wesentlich geschickter, die Tilemap in eine extra Klasse auszulagern und über Indices x, y zu verwalten, wobei halt x das Tile an der Position x mit der allgemeinen Breite von Tiles angibt. Ansteuern kannst du es dann von der GUI aus über (pos.X \ tileBreite) bzw. eben (pos.Y \ tileHöhe). Sobald sich ein Tile ändert, musst du es natürlich neuzeichnen.

    Gruß
    ~blaze~
    Thilo hat schon den richtigen Ansatz, jedoch ist sein Code etwas seltsam.
    Das Prinzip ist ja recht einfach, du hast ein zweidimensionales Array, welches du durch Tiles darstellen willst. Dann ist ein Tile eben so groß wie Die Formabmessungen geteilt durch die Anzahl der Teils (jede Achse einzeln berechnen). Wenn du weißt, wie groß ein Tile ist, dann ist es auch nicht mehr schwer herauszufinden, in welchem sich die Maus befindet.
    Option Strict sollte bei dir auf Off sein. /100 erzeugt kein Integer,
    sondern ein Double. Korrekt wäre \ statt /, dann würdest du eine
    Integer-Division durchführen, der Rest wird einfach entfernt. Ansonsten
    könntest du auch einfach (e.X \ 100) * 100 rechnen.
    Achso, ich dachte, das wäre Wurst, weil (e.X - e.X mod 100)/100 eh immer ganze Zahlen erzeugt.
    Die Typen selber wissen prinzipiell nicht, welche Werte sie annehmen. Auch "123" könnte als Zahl interpretiert werden, ist aber ein String. Wenn man letztendlich aber wirklich den Wert, der durch den String dargestellt werden soll, ermitteln möchte, muss man eine konvertierende Funktion, wie z.B. TryParse, aufrufen. Bei Double und Integer verhält es sich ähnlich. Double kann, solange der Wertebereich von Integer nicht überschritten wird, immer konvertiert werden, es steht aber nie explizit fest, dass das Ergebnis ein Integer sein wird, außer der Programmierer weiß es. Wenn ein Double nicht in den ganzen Zahlen liegt, wird es in VB glaub' ich beim Konvertieren gerundet.

    Gruß
    ~blaze~