Isometrische Wand - depth Probleme

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Isometrische Wand - depth Probleme

    Hey,
    Ich möchte ein Isometrisches Spiel entwickeln... mit Mauern.
    Aber die Mauer wird nicht richtig gezeichnet, so wird sie vor dem Player gezeichnet wenn er in der linken unteren Ecke der Wall steht, obwohl sie eigentlich hinter ihm sein sollte.
    Ich habe eine Ahnung wo das Problem liegt, aber keinen Schimmer wie ich es lösen kann.
    Hier ein Bild:
    Bilder
    • GM-D_iso.wand.PNG

      9,13 kB, 594×421, 410 mal angesehen
  • versuch mal

    GML-Quellcode

    1. depth = -y;

    ich glaub so war das.
    Lange her das ich sowas gemach hab ^^
    Ein Bug ist mehr als nur ein Bug, es ist ein... Käfer!
    Egal, wie gut du eine Mauer baust, sie fällt um.... der klügere gibt nach :D

    Willst du mit mir auf Discord Chatten/Quatschen?
    Meine Husi's Tutorial Reihe
  • "depth=-y;" ist schon der richtige Ansatz, auch für die Wände.
    Bei statischen objekten reicht es den Code einmalig im Create-Event auszuführen. Bei sich bewegenden muss er in das Step-Event.
    Somit hängt die Reihenfogle von der y-Koordinate ab. Diese wiederum hängt vom Origin ab. IM Idealfall setzt man dieses an die Füße der Objekte, also da wo sie den Boden berühren.
    Setzt man dieses nur in die obere linke Ecke oder die Mitte, kann es schnell passieren das zwischen großen und kleinen Objekten es zu falschen Überschneidungen kommt.
  • Erstmal danke für die Antworten.
    Ich hab schon verstanden, so ist es bei mir ja auch mit dem

    GML-Quellcode

    1. depth = -y;

    Mein Code ist auch so aufgebaut! Nur kommt es eben zu diesem Problem mit der Wand...
    Lasst es mich mit meinen begrenzten Paint Skills demonstrieren:


    Hoffe es ist verständlich genug. Hoffe auf Antworten!
    Bilder
    • GM-D_demo.png

      20,84 kB, 1.152×648, 317 mal angesehen
  • Ein kleiner Fehler besteht darin das du nicht den Mittelpunkt des Objektes als Bezugspunkt für die depth genommen hast.

    Soll heisen,alle onbjekte die ja im Grundeblockartig sinbd haben ihren Bezugspunkt immer in der Mitte. Nicht an der Unteren Seite , so wie in deiner Skizze.
    Schau ein fach mal in dsa GM8.1 Isometric Examplerein. Dort stetht auch nur depot=-y.........

    Dann sollte es gehen
    Meine Signatur hat kein Visum für das GM Forum erhalten.
  • Na dann brauchst du nur den Origin vom player oder von den anderen Objekten nach unten bzw nach oben zu verschieben. Oder du rechnest zur depth eine wert dazu. depth = -y-4 im player. das darf dann aber nicht die höhe deines isometrischen rasster überschreiten, weil sonst dein player wieder zu weit vorne gedrawed wird.

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)
  • tjeeeee...
    ich bin mittlerweile ein ganzes Stück weitergekommen bei meinem Projekt (mein Editor ist jetzt top-down, das Spiel aber isometrisch) aber bei der Mauer habe ich immer noch keine befriedigende Lösung gefunden.
    Ich spalte die Mauer im Moment in viele kleine Segmente auf, aber damit bin ich nicht wirklich zufrieden..
  • Sooo,
    ich habe das Problem effektiv gelöst und teile hier meine Lösung falls Irgendjemand mal das selbe Problem haben sollte wie ich:
    Mein Room Editor ist im top-down view designed. Ich empfehle jedem der ein isometrisches Spiel entwickeln will das zu übernehmen. So ist der Editor, wenn das Spiel größer und komplexer wird viel übersichtlicher! Er sieht im übrigen so aus:



    Nun habe ich einen Sprite erstellt, er heißt spr_walls. Er ist 2 Pixel breit, 128 Pixel hoch und komplett braun. Dieser Sprite ist einem Objekt namens obj_walls zugeordnet. obj_walls soll als einzelnes Segment der Wände dienen.
    Außerdem habe ich noch ein Objekt für den Editor gemacht, obj_wall_e. Der Sprite für dieses Objekt ist einfach ein brauner Strich, damit man das Objekt im Editor sofort als Wand identifizieren kann.
    obj_wall_e wird nach Bedarf im Editor platziert. Dort wo im Editor ein obj_wall_e ist, wird im Spiel eine richtige Mauer stehen!
    Beim starten des Spiels wird in obj_wall_e, in einem Create Event dann folgender Code ausgeführt:

    GML-Quellcode

    1. for (xx = 124; xx >= 0; xx -= 4) instance_create(x + xx, y, obj_walls);

    So werden für jedes obj_wall_e, nebeneinander 31 obj_walls erstellt. Jedes mit einer eigenen depth(!).
    Danach wird in jedem einzelnen der erstellten obj_walls Objekte, ebenfalls in einem Create Event, dieser Code ausgeführt:

    GML-Quellcode

    1. xx = x;
    2. yy = y;
    3. xx = (x - y) / 2;
    4. yy = (x + y) / 4;
    5. x = xx;
    6. y = yy;
    7. depth = -y;

    Im ersten Schritt werden die top-down Koordinaten zu isometrischen Koordinaten umgerechnet, danach wird einfach die depth entsprechend der y Position angepasst.
    Das Resultat sieht so aus:



    Für mich bis jetzt 100% Bug-frei! :thumbup:
    Ich hoffe es hilft jemandem :)
    Falls einer Fragen hat kann er sie jederzeit stellen.

    LG
    Tando
    Bilder
    • GM-D_edit.PNG

      53,47 kB, 989×597, 293 mal angesehen
    • GM-D_wall.demo.PNG

      64,87 kB, 1.035×801, 321 mal angesehen

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von Tando ()