Keine Sortierung von Tile-Layern möglich?

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

  • Keine Sortierung von Tile-Layern möglich?

    Sofern mir bekannt, werden Tiles (scheinbar)willkürlich auf den Bildschirm gezeichnet.
    Wenn ich also eine Map erstelle und ein Boden-Tile von 32x32 habe, das über die komplette Karte gezeichnet wird
    und ich einen Baum habe, der 64x32 hat, ebenfalls darauf platziere(im selben Tile-Laver), dann kann es sein, dass
    ein Boden-Tile, den Baum oben verdeckt.
    Gibt es eine Möglichkeit, die Tiles vom System(im Raum Menü) richtig anordnen zu lassen(wenn man den Hot-Spot
    auf die untere Kante der Sprites setzt?

    Und wenn nicht, wäre es nicht schön, wenn GM eine solche Möglichkeit anbieten würde, so in der Art von einer
    Checkbox, die "Sort Tiles" heißt und wo man dann etwa folgende Möglichkeiten zur Wahl hat:

    x ... ? / y ... ?
    ? ... x / ? ... y
    x ... ? / ? ... y
    ? ... x / y ... ?

    Also in welcher Reihenfolge die Tiles auf den Bildschirm gezeichnet werden, unter Berücksichtigung des gesetzten
    Hot-Spot.
    Das wäre doch eine riesige Erleichterung, beim Umgang mit Layern, oder wie löst Ihr das Problem?
    Derzeit kommt man doch um eine Art, der Sortierung von Tiles, nicht herum, warum also nicht von GM erledigen
    lassen, wo er doch so und so schon die Tiles darstellen muss, warum also nicht gleich so, wie man es möchte.

    Miradur
  • Es ist bewusst, so designed, dass du mehrere Tile layer übereinander stapelst. So wie in Photoshop. Du legst zB zuerst Erde und Gras Tiles aus, dann kommen halbtransparente Wasser Tiles einen Layer höher über die Erde und noch einen Layer höher kommen die Bäume und Büsche.

    Das hat den Vorteil, dass du kollisionen mit einem Tile layer haben kannst, wodurch du zB nur mit allen Bäumen kollidierst.
    HIer etwas zu Tiles aus der Documentation

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)
  • Danke für Deine Antwort, aber mir ist der Vorteil von Layern durchaus bewußt, aber es ist meiner Ansicht nach,
    eben nicht konsequent durchdacht(eben die fehlende Sortierung).
    Früher machte man Tiles, in einer bestimmten Größe und alles was sich überlappt hat, hat man auch auf separate
    Teile eben mit dieser Überlappung gezeichnet, so dass man die Teile einfach in der Art von links nach rechts und
    oben nach unten, darstellen konnte und alles lief super.
    Heute arbeiten praktisch alle Tiles mit dem Alpha Kanal und deshalb ist das Layerkonzept ein logischer Schritt in
    die richtige Richtung gewesen.

    Aber was muss ich nun tun, um eine Sortierung zu vermeiden? Nun, nehmen wir an, ich habe ein Spielfeld von
    800 Breite und 500 Höhe und möchte einen Wald von Bäumen haben, der sehr dicht aussehen soll.
    Ich lege also 500 Layer an, für jede Pixelzeile der Höhe und wenn ich mindestens 30 Bäume nebeneinander
    darstellen möchte(die sich überlappen), dann benötige ich für jede Layergruppe(eben die 500), nochmal je 30
    untergeordnete Layer(für meine 30 Bäume) ........ macht dann 15000 Layer, wenn ich mich nicht verrechnet habe :)

    Also, es wäre schon machbar, so ein Vorhaben mit Layern umzusetzen, aber wenn es eine Sortierung geben würde,
    dann würde ich für dieses Beispiel eben nur 1 Layer benötigen und stelle die Sortierung auf "x...? / y...?" und die
    Sache hat sich.

    Deshalb nochmal die Frage, habe ich etwas übersehen, gibt es mit Layern bessere Möglichkeiten?
    Denn wie gesagt, die Sortierung ist außen vor, denn davon gibt es eine Menge Tutorials, woran man auch sehen
    kann, dass das Layersystem in der derzeitigen Form, noch Schwächen hat.

    Ich würde das ja gerne im englischen Forum posten, aber der Hintergrund meines Wunsches, ist eben nicht so mal
    kurz erklärt und ich denke, das würde den Translator überfordern ;)

    Oder werden Wünsche nach neuen Befehlen hier auch gehört?

    Miradur

    Edit: hat doch eine Null gefehlt bei den Layern :)
    Und ich weiß, es handelt sich hier um ein extremes Beispiel und einen dichten Wald kann man auch einfacher umsetzen,
    aber es geht mir eben um die korrekte Handhabe von Layern, wenn ich eben so etwas wie oben im Spiel haben möchte.
  • Also das einfachste wäre es, eine tile map zu erstellenm wo man die Ränder und die das dichte innere als Tiles reinzeichnet. Die Überlappung kommt dann durch das Zeichnen selber zustande. Das passt aber vllt nicht zu jedem Stil.

    ich wär mir nichtmal sicher, ob im englischen Forum jemand auf einen Funktionswunsch eingeht - welche Version von GM verwendest du denn überhaupt? Du kannst aber natürlich versuchen ein support ticket zu schreiben (ähnlich einen git issue) oder ein tile z sort selber über eine dll zu implementieren.

    Andere lösung (ungetestet!) wenn du in code tiles createst und von links oben nach rechts unten durchgehst, sollten auch alle Bäume geordnet sein.

    Der GM unterstützt sehr sehr viele Tile layer, default layer ist glaube ich 10 000, wenn man tiles setzt. Du könntest also ruhig, deinen wald aus einer leveldatei rauslesen, die tiles setzen lassen (nicht im room editor, sondern selber im code bedingt durch das file in dem dein level abgespeichert ist) und für jedes y eine tile layer number haben.

    Wie du siehst, stösst man irgendwann auf Grenzen des GameMakers und muss drum rum arbeiten, wenn man dabei bleiben will.

    Noch eine simplere Lösung wäre, alle deine Bäume sind objects, anstatt tiles, und ihre depth ist -y, dann kannst du sie im room editor platzieren und sie sind automatisch sortiert. Der GMS2 unterstützt, glaube ich, auch object layers, damit kannst du alle Bäume in einen layer packen, getrennt von den anderen objects, um das editieren übersichtlicher halten zu können. Keine Ahnung, ob das dann die collisions stört.
    Damit du dannn nicht hunderttausend Bäume renderst und das spiel ruckelt, kannst du alle objects außerhalb der view deaktivieren
    und voila: z sorted Bäume, der player hat vllt auch eine depth von -y+1 und schon wird er mit sortiert. :)

    Spoiler anzeigen
    und wenn das alles nix ist und der GM zu starr für dich ist, empfehle ich Phaser.js ;)
    aber im normal Fall kommt man mim GM gut aus

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)
  • Wenn ich mich richtig erinnere sortiert GMS1 die tiles nach der oberenlinken ecke, wenn sie auf dem selben layer liegen. Heißt ein kleiner Busch den du hinter dem unteren Teil eines großen Baumes platzieren möchtest würde vor dem Baum gerendert werden, weil dessen y Koordinate größer ist. Einzige Lösung ist ein eigener Layer oder Objekte verwenden.

    Bei echten Tiles, wie der GMS2 sie auch nutzt, kann man übrigens gar nicht erst Tiles auf dem selben Layer überlappen. In GMS1 ist das nur möglich, weil es gar keine echten Tiles sind sondern im Grunde light weighted objects mit einem unnötig großem overhead pro Tile. Dies hat den Vorteil, dass man einen Bereich an Tiles als einzelnes "großes Objekt" platzieren kann und darüber hinaus unabhängig vom Raster pixel genau platzieren. Dafür kann der GMS2 sprites direkt im room platzieren ohne dafür ein objekt zu verwenden, was im grunde den alten Tiles vom GMS1 entspricht.
  • Hi, ich verwende Game Maker Studio V2.xx, sorry, dachte, das wäre klar, weil es um Layer geht
    (die kamen doch erst mit 2.0, oder?). Hatte mir damals aus einer Laune heraus, die V1.4 gekauft,
    aber nichts damit gemacht, dann kam 2.0 und ebenfalls gleich gekauft, aber wieder nichts
    gemacht damit.
    Jetzt mach ich meist so Spielereien, wie 5-10 Hintergründe anlegen und automatisch Scrollen
    einschalten und mich freuen, wie schnell man Parallax Scrolling mit GM hin bekommt ;)
    Und eben das richtige positionieren, Tiefensortierung und optimale Verwendung der Layer,
    interessiert mich derzeit sehr.
    Es ist auch nicht so, dass ich es nicht hin bekomme, aber es wurmt mich doch sehr, dass GM
    den erstellten Raum ja bereits mit internen Routinen anzeigt, ich mich aber dann trotzdem
    mit der Tiefensortierung beschäftigen muss.
    Man wird in GM schier erschlagen, von der Vielfalt an Befehlen, es gibt scheinbar wirklich für
    jeden Mi... einen eigenen Befehl und dann fehlt so etwas essentielles.
    Irgendwo im englischen Forum hat Mike mal erwähnt, dass man sich eben nicht darauf verlassen
    kann, dass GM die Tiles von links nach rechts und oben nach unten, sortiert.
    Und depth ist zwar noch als Variable vorhanden, sollte man aber nicht mehr verwenden, weil
    es das Layersystem aushebelt. Hab den Beitrag leider nicht mehr gefunden.

    Auszug aus der Hilfe:
    Spoiler anzeigen
    ​IMPORTANT! When you modify the depth variable and GameMaker STudio 2manages the layers, the built in layer variable will return -1 andnot the layer ID, since managed layers cannot be manipulated through code.


    Versteht mich nicht falsch, es stört mich nicht, ein Problem mit "Programmieren" zu lösen,
    aber ich finde es etwas seltsam, dass ich für jede Kleinigkeit, einen Befehl dazu in GM finde
    und dann für Dinge, die mitunter wirklich auf Rechenleistung gehen(60x pro Sekunde den
    Raum durchsortieren), keinen zu haben.
    Und ich gehen davon aus, dass die Leute bei YoYo alle tausendmal besser programmieren, als ich,
    warum also nicht die Profis ranlassen, um eine simple Checkbox zu integrieren, mit der ich GM
    dazu veranlasse, den Raum sortiert darzustellen?

    Meiner Ansicht nach, braucht man ja nur zu sehen, wofür es die meisten Tutorials gibt oder was
    am meisten auf Marketplace geladen wird, dann hat man schon einen guten Indikator, welche
    Befehle wirklich noch fehlen oder wo man es vielleicht ein wenig einfacher machen sollte.

    Vielen Dank an Alle, für die wirklich umfangreichen Hinweise und Hilfestellungen :)

    Miradur
  • Ebenfalls ein kleines Update und kurz gesagt, es ist NICHT möglich!
    Siehe hier, ein Thread aus dem englischen Forum:

    https://forum.yoyogames.com/index.php?threads/what-is-the-good-way-to-handle-tile-object-depth.26641/

    Dort würde ebenfalls jemand gerne, seine Tiles, durch Sortierung, an den Player anpassen, aber es scheint
    derzeit keine sinnvolle Lösung dafür zu geben(außer mit Tricks aus GM Version 1.4 und die hebeln ja das
    Layer Sytem von 2.0 aus).

    Miradur

    PS.: nett fand ich auch eine Aussage von Mike dazu, den -y Trick wollten sie durch das neue Layer System,
    aktiv unterbinden, weil es zu viel Performance gefressen hat. Da ist es natürlich schön, wenn man das jetzt
    dem geneigten Hobby Programmierer überläßt.