Parallax Plugin

  • Ja, ich weiß. Das Thema haben wir immer wieder. Aber ich finde einfach kein Plugin, was das tut, was es soll, und das, was ich möchte.


    Also: Ich bin auf der Suche nach einem Parallax Plugin. Sonst nutze ich ja TDD, aber das mag irgendwie keiner (obwohl ich noch nie Probleme damit hatte, aber jetzt scheint es mit einem der anderen Plugins nicht kompatibel zu sein).


    Oc Ram Layers hab ich ausprobiert, ist auch mit einem anderen Plugin nicht kompatibel (weiß nicht mehr, welches es war, ist schon etwas her).


    Orange Overlay plus das Addon für animierte Maps hab ich probiert. Aus irgendeinem Grund wirft das Addon direkt zum Start einen Fehler raus - wenn ich das weglasse, funzt zumindest das Orange Overlay einwandfrei. Hier fehlt mir jedoch die Funktion, die Layer tauschen zu können (mehr dazu unten).


    Galv Layer Graphics hab ich auch probiert, ist mega cool, ich kann hier sogar Layer tauschen, allerdings nur mit festen Namen und Zahlen und das gibt bei 50 Maps (die das Spiel schätzungsweise irgendwann haben wird) dann eben 50 Zeilen Script Codes...


    Aber was meine ich mit diesem "Layer tauschen" überhaupt?

    Wenn man hinter größeren Dingen herläuft, z.B. Gebäude, sieht man seinen Charaktersprite ja nicht mehr. Konsequenz: Ich hab keine Ahnung, wo ich gerade bin und ich welche Richtung ich gehen muss, um wieder rauszukommen. Das ist doof. Also tausche ich den "above Character" Layer und setze ihn nach unten, tausche gleichzeitig den Charactersprite mit einer weißen Silhouette und voilà - ich sehe, wo ich bin.


    Guckst du hier:



    Das gefällt mir mittlerweile so gut, dass ich darauf nicht mehr verzichten will. (Hier auf dem Bild ist es nur eine kleine Wand als Beispiel, später wird es auch noch größere Gebäude geben, hinter denen man komplett verschwindet.)


    Ich brauche also ein Plugin, das es im laufenden Spiel ermöglicht, den "above" Layer mal eben nach unten zu setzen, mittels Plugin-Befehl oder whatever.


    Welche kennt ihr noch, die ich noch nicht ausprobiert hab?

  • geht viel einfacher: mach deinen par 80% Opacity und lege die gleiche Information in deinen ground.
    das sieht dann so aus:



    Edit:

    wenn du an verschiedenen Stellen des Objekts anders reagieren willst,

    Natürlich kann man den Par an den Stellen, wo man es möchte, auf 100% lassen und somit alles Blocken. Du kannst in deinem Pixelprogramm auch Alpha-Gradienten erzeugen etc. Das schöne daran ist, dass du nicht programmieren musst, sondern eine komplett visuelle Lösung hast. Ich finde das vorallem im fortgeschrittenen Verlauf eines Projects immer problematisch, wenn die Variablen in der Nähe der Ursprungsvariable schon vergeben sind.
    VAR_005-Opacity-Building01
    VAR_246-Opacity-Building02

    Ihr versteht, was ich meine...

  • Interessante Idee, vielen Dank :)

    Finde ich aber ehrlich gesagt etwas kompliziert, jedes Gebäude in zig Events aufzuteilen. Aber auf jeden Fall nicht schlecht, kann man so machen :)

    geht viel einfacher: mach deinen par 80% Opacity und lege die gleiche Information in deinen ground.

    Das ist auch cool, vielen Dank! :) Hab ich das richtig verstanden: Du legst deinen Ground-Layer, dann den Above-Layer einfach direkt drauf (bzw beides gleich in 1 Bild) und dann den Above-Layer noch einmal zusätzlich drüber, nur eben mit weniger Deckkraft? :/ Cooler Ansatz, ich glaube, ich probiere das mal.

  • Ich habe die Charakter Methode für das Parallax meiner Overworld Map genutzt. Diese besteht nur aus sehr viel Wasser und einer Insel in der Mitte.


    Habe nur die Insel mit gimp an Details ergänzt und als Charakter exportiert, so spare ich es mir ein extrem großes Bild anzuzeigen und habe die Details nur dort wo ich sie auch benötige.





    Sry das war etwas offtopic, hier eine ergänzt zum Thema.


    Das mit dem einbrennen des Overlays zusätzlich in den Ground Layer und das transparent anzeigen des Overlays ist wohl die beste Lösung.


    Anders würde es noch gehen wenn du statt den Charaktersprite auszutauschen ein Bild an in heftest. So mache ich es im Wald von Dampftraum immer wenn der Charakter von Bäumen verdeckt wird. Da das angezeigte Bild über dem Overlay liegt sieht man immer wo der Charakter gerade ist. Man kann z.b. einen Roten Pfeil verwenden oder wie ich einen Rahmen:

  • Du musst die Objekte nicht in Events aufteilen. 🤔

    Man erstellt (am besten in einem Projekt, das nur dafür da ist) eine Map.

    Auf der zeichnet man das gewünschte Objekt (zB Gebäude). Danach bearbeitet man die Map mit der dreifachen Breite des Gebäudes und der vierfachen Höhe des Gebäudes. Mit Orange Mapshot kannst du dann diese Map (benannt zB !$Gebäude) sogar direkt in die Charsets kopieren und musst nichts weiter beachten.


    So kannst du sie als Charset direkt benutzen und kannst sie unendlich oft verwenden. Zudem hast du die anderen 3 Layer komplett frei zur Verfügung für was immer du sie brauchst (kleine Objekte zB) :D

    Okay, dann habe ich dich falsch verstanden, sorry. Finde es aber dennoch irgendwie komisch, ein Charset zu erstellen mit der 3-4fachen Größe von dem, was es eigentlich beinhaltet. Mir ist klar, dass das wegen der Eigenheiten des Makers nicht anders geht. Vielleicht komme ich auf diese Lösung zurück, aber ich würde gerne zuerst eine der beiden anderen ausprobieren.


    Anders würde es noch gehen wenn du statt den Charaktersprite auszutauschen ein Bild an in heftest. So mache ich es im Wald von Dampftraum immer wenn der Charakter von Bäumen verdeckt wird. Da das angezeigte Bild über dem Overlay liegt sieht man immer wo der Charakter gerade ist. Man kann z.b. einen Roten Pfeil verwenden oder wie ich einen Rahmen:

    Vielen Dank für dein anschauliches Anschauungsmaterial :)

    Nachdem ich deine Lösung gelesen habe, fiel mir ein, dass ich das tatsächlich schon ausprobiert hatte. Funktioniert aber nicht. Ich weiß nicht, ob der Fehler bei mir liegt oder ob das mit Parallax nicht möglich ist.


    Habe testweise einfach einen weißen Kreis erstellt, den ich als Picture auf den Koordinaten des Spielers anzeigen lasse. So sieht das aus:



    Da, wo der rote Pfeil hinzeigt, ist der Char hinter der Wand. Da, wo der blaue Pfeil hinzeigt, wird der weiße Kreis angezeigt. Die gute Nachricht: Ja, das Bild wird über allem anderen angezeigt. Die schlechte Nachricht: Das Bild hängt oben links in der Ecke, egal, wohin ich den Char bewege. (Außer, ich gehe hinter der Wand wieder raus, dann wird das Bild natürlich gelöscht.)


    Vielleicht steh ich ja gerade voll auf dem Schlauch und mach irgendwas falsch, also hier mal das Event dazu:



    Ist nur ein Auszug, das CE geht noch länger, aber der Rest ist hierfür nicht relevant. Mit der Region-ID 39 sind alle Tiles belegt, die hinter Wänden sind, wo der Char verschwindet. Ein Blick mit F9 verrät mir, dass Spieler Pos X und Y bei 23 und 19 sind, aber das Bild wird trotzdem oben links angezeigt. Warum?


    PS: Ich finds aber echt cool, wie viele unterschiedliche Lösungsansätze es für dieses Problem gibt :) Danke fürs Teilen eurer Ideen!

  • Ein Blick mit F9 verrät mir, dass Spieler Pos X und Y bei 23 und 19 sind, aber das Bild wird trotzdem oben links angezeigt. Warum?

    Weil deine Spielerkoordinaten "Kachelkoordinaten" sind (d.h. der Spieler befindet sich in deinem Beispiel auf der 23. Kachel von Links und der 19. Kachel von Oben), der "Bild zeigen"-Befehl nimmt den Variablen-Wert aber als Pixelwert (setzt das Bild also bei der Pixelposition X=23 und Y=19 des Screens). Um das zu korrigieren, müsstest du deine beiden Variablen vorher einfach mal der Größe einer Kachel rechnen (Standard bei MV und MZ wäre da 48 wenn du das nicht geändert hast). Wenn die Map allerdings größer als der Screen ist, wird das ganze wahrscheinlich nicht richtig funktionieren, ohne dass du den Variablen-Wert noch anpasst.

  • Ein Blick mit F9 verrät mir, dass Spieler Pos X und Y bei 23 und 19 sind, aber das Bild wird trotzdem oben links angezeigt. Warum?

    Weil deine Spielerkoordinaten "Kachelkoordinaten" sind (d.h. der Spieler befindet sich in deinem Beispiel auf der 23. Kachel von Links und der 19. Kachel von Oben), der "Bild zeigen"-Befehl nimmt den Variablen-Wert aber als Pixelwert (setzt das Bild also bei der Pixelposition X=23 und Y=19 des Screens). Um das zu korrigieren, müsstest du deine beiden Variablen vorher einfach mal der Größe einer Kachel rechnen (Standard bei MV und MZ wäre da 48 wenn du das nicht geändert hast). Wenn die Map allerdings größer als der Screen ist, wird das ganze wahrscheinlich nicht richtig funktionieren, ohne dass du den Variablen-Wert noch anpasst.

    man kann doch per scriptcall direkt die positionx und y des Spielers auf dem screen bekommen, soweit ich das noch richtig im kopf habe.

    dann erspart man sich einige fehlerquellen und rechnerei.

  • Weil deine Spielerkoordinaten "Kachelkoordinaten" sind (d.h. der Spieler befindet sich in deinem Beispiel auf der 23. Kachel von Links und der 19. Kachel von Oben), der "Bild zeigen"-Befehl nimmt den Variablen-Wert aber als Pixelwert (setzt das Bild also bei der Pixelposition X=23 und Y=19 des Screens).

    Oh, da sagste was. Also doch ein Parallax-Problem und ich hab nicht richtig zuende gedacht :D

    Danke!

    Bild ist allerdings jetzt komplett weg... Keine Ahnung wo es rumgammelt. Ich glaub, ich wende mich einer anderen Lösung zu :D:D

  • man kann doch per scriptcall direkt die positionx und y des Spielers auf dem screen bekommen, soweit ich das noch richtig im kopf habe.

    dann erspart man sich einige fehlerquellen und rechnerei.

    Stimmt, würde auch gehen. Hab aber grad zwei mögliche Varianten ausprobiert ($gamePlayer.pos(x, y) und $gamePlayer.x; $gamePlayer.y;), beide zeigen meine Grafik wieder oben links in der Ecke an. Ob es noch mehr Varianten gibt, weiß ich nicht.

    Hab grade rausgefunden, dass es ja bei den Spieldaten nicht nur Spieler Karte X, sondern auch Bildschirm X gibt. Was immer der Unterschied ist. Mit Bildschirm X funktioniert es, allerdings ist die Grafik um ein Tile nach unten und rechts verschoben. Ist auch nicht so das Wahre.

  • Spieler Karte X, sondern auch Bildschirm X gibt. Was immer der Unterschied ist.

    Spieler Karte X gibt dir die X-Kachel-Position des Spielers auf der gesamten Karte, während Bildschirm X dir die Position des Spielers auf dem Bildschirm des Spielfensters gibt


    allerdings ist die Grafik um ein Tile nach unten und rechts verschoben.

    In dem Fall einfach beide Variablen einmal -48 (Oder was auch immer deine Kachelgröße ist) rechnen

  • man kann doch per scriptcall direkt die positionx und y des Spielers auf dem screen bekommen, soweit ich das noch richtig im kopf habe.

    dann erspart man sich einige fehlerquellen und rechnerei.

    Stimmt, würde auch gehen. Hab aber grad zwei mögliche Varianten ausprobiert ($gamePlayer.pos(x, y) und $gamePlayer.x; $gamePlayer.y;), beide zeigen meine Grafik wieder oben links in der Ecke an. Ob es noch mehr Varianten gibt, weiß ich nicht.

    Hab grade rausgefunden, dass es ja bei den Spieldaten nicht nur Spieler Karte X, sondern auch Bildschirm X gibt. Was immer der Unterschied ist. Mit Bildschirm X funktioniert es, allerdings ist die Grafik um ein Tile nach unten und rechts verschoben. Ist auch nicht so das Wahre.

    Bildschirm X hab ich gemeint.
    du musst bedenken, der Anker der spielergrafik ist unten, der Anker des Bildes wird aber oben angegeben, dadurch kommt das 1 tile versatz zustande.
    würde ich jetzt zumindest meinen

  • Ich nutze Moghunter Picture Effects dafür. Dort kann man Bilder einfach an Events pinnen.