Ergebnis 1 bis 16 von 16

Thema: Mimosen-Effekt einbauen

  1. #1

    Mimosen-Effekt einbauen

    Hi, ich hab mal wieder ne Frage.

    Ich würde gerne Mimosen-Gras (Wikipedia) in mein Projekt einbauen.
    Also, dass das Gras erst etwas länger ist und wenn ich mit meiner Figur darüber laufe dann zieht es sich ein und kommt erst nach ner gewissen Zeit wieder raus (wenn ich dann nicht mehr drauf stehe oder auch wenn ich unbeweglich bleibe).
    Ich dachte mir das so zu machen, das ich das Gras-Tile in mehrere verschiedenen Längen Pixle (wie viele genau müsste ich dann noch testen) und ich um den Spieler herum einen Kreis ziehe. Innerhalb dieses Kreises Radius x von Unterkante der Spielfigur wird das kürzeste Gras angezeigt. von x bis x+y wird ein etwas längeres Gras angezeigt , von von x+y bis x+y+z noch längere und so weiter, je nach Anzahl an Graslängen.
    x, y, z, ... sind dabei frei bestimmbar.
    Nach einer gewissen Zeit fängt dieser Radius wieder an zu schrumpfen, bis er komplett weg ist. Auch diese Wartezeit am Anfang und die Geschwindigkeit mit der die einzelnen Radien schrumpfen soll frei einstellbar sein.
    Und die Spielfigur erschafft ständige neue Ausgangspunkte für die Radien, wenn sie sich bewegt. Es ist also nicht immer ein fester Radius nur um die Figur, sondern man sieht auch den weg, den man gegangen ist, weil da sich das Gras auch erst langsam wieder aufrichtet.

    Ich zeichne das mal Schematisch auf, wie ich das meine:

    Klicke auf die Grafik für eine größere Ansicht 

Name:	Mimosen-Gras Schematisch.png 
Hits:	151 
Größe:	51,2 KB 
ID:	22845

    Die Figur geht gerade nach oben (roter Pfeil). Nach kurzer Zeit kommt das Gras wieder raus (ab den Knicken der äußeren Linien). Im Bild kommt es am Anfang etwas schneller raus, aber bis zur vollen länge dauert es noch etwas länger.

    Kann man sowas irgendwie über die Events mit dem Maker (VX Ace) machen? Ich konnte da nichts zu finden. Oder gibt es da ein Script, dass man für so einen Effekt nutzen kann?
    Oder kennt ihr eine andere Methode, wie ich das hinkriegen kann?

    Danke euch

  2. #2
    Ich bin mir nicht sicher ob du Tile-IDs mit Events ändern kannst, aber mit Ruby-Script geht es auf jedenfall. Was sehr viel schwieriger sein wird ist die zeitliche Komponente.
    Hier ist was du brauchst:
    1) Eine Möglichkeit heraus zu finden, dass der Spieler sich bewegt hat (falls du es NUR für den Helden haben willst)
    2) Eine Möglichkeit alles Tiles zu kennen, welche Zeit basiert verändert werden müssen (weil sie in Zukunft wieder länger werden)
    3) Eine Möglichkeit die Zeit kontinuierlich hoch zu zählen falls nötig
    4) Eine Möglichkeit Tile-IDs beliebig zu setzen.

    Das ist alles möglich, aber nicht trivial. Zumindest nicht für einen Anfänger. Und es wird ach definitiv nicht gerade vorteilhaft für die Performance werden. Ruby-Scripte skalieren sehr schlecht in der Größe. Wenn du diesen Effekt für alle deine Events haben möchtest und für große Flächen von Gras wird es sich sehr schnell bei der Performance erkennbar machen.

  3. #3
    Zitat Zitat von Cornix Beitrag anzeigen
    Ich bin mir nicht sicher ob du Tile-IDs mit Events ändern kannst, aber mit Ruby-Script geht es auf jedenfall. Was sehr viel schwieriger sein wird ist die zeitliche Komponente.
    Hier ist was du brauchst:
    1) Eine Möglichkeit heraus zu finden, dass der Spieler sich bewegt hat (falls du es NUR für den Helden haben willst)
    2) Eine Möglichkeit alles Tiles zu kennen, welche Zeit basiert verändert werden müssen (weil sie in Zukunft wieder länger werden)
    3) Eine Möglichkeit die Zeit kontinuierlich hoch zu zählen falls nötig
    4) Eine Möglichkeit Tile-IDs beliebig zu setzen.
    Wie bitte? ^^'
    (Es soll auch bei anderen Personen funktionieren, das Gras ist ja nicht nur Fremdenfeindlich sondern auch bei Anwohnern versteckt es sich )

    [QUOTE=Cornix;3274766]Das ist alles möglich, aber nicht trivial. Zumindest nicht für einen Anfänger.
    Da haben wir das Problem. "Anfänger". Mit Ruby hab ich keinerlei Erfahrung. Ich hatte gehofft, dass es da schon einen Workaround gibt, der in etwa diese Problematik löst, also dass in einem Bestimmte Umkreis um einen herum etwas passiert. Und da hätte ich dann "nur" noch anpassen müssen, dass sich die Bilder ändern und den Radius gleichmäßig verkleinern lassen.

    Zitat Zitat von Cornix Beitrag anzeigen
    Und es wird ach definitiv nicht gerade vorteilhaft für die Performance werden. Ruby-Scripte skalieren sehr schlecht in der Größe. Wenn du diesen Effekt für alle deine Events haben möchtest und für große Flächen von Gras wird es sich sehr schnell bei der Performance erkennbar machen.
    Das hatte ich auch befürchtet. Bei dem Projekt von Maister Räbbit zum 48h-Contest gab es ja diesen Lichteffekt. Der war richtig cool, aber hat ordentlich an der Performance geknabbert so das ich es (mit einem recht guten Ultrabook) nur ruckelnd spielen konnte.

    Dann mal ne andere Frage: Wird das mit deinem Maker möglich sein? Du hast/willst ja eine ganze Menge Bewegungsabläufe eingebaut/einbauen, werden solche etwas spezielleren Abläufe (ohne Programmierkenntnisse) machbar sein?

  4. #4
    Keine Ahnung, was du verwendest, aber mit dem 2k3 ist es auf jeden Fall möglich - aber extrem kompliziert, wenn du das echt für mehr als eine Figur haben willst. Mit dem Helden alleine ist das schon ein ziemlicher Aufwand, da du im Prinzip für jedes Grasfeld ein Event mit eigener Variable bräuchtest. Könnte man sicher zwar mit Copy&Paste lösen (also, dass du ein Event zigmal kopierst und nichts anpassen musst), aber sagen wir dein Grasfeld ist 10 Felder hoch und 10 breit = 100 Events. Wenn du da nicht aufpasst haut das böse auf die Performance, je nach dem, wie du das umsetzt.

    Möglich ist es bestimmt, ich würde es aber denke ich lassen (oder auf ein sehr kleines Areal begrenzen).

    Möglichkeiten, die mir spontan einfallen:
    - Das ganze als Touch-Event einstellen, dass dann selbst runterzählt, wann es seine Grafik ändert. Nachteil: Viele Variablen, da du für jedes Feld eine bräuchtest. Außerdem: Du hast dann eventuell fix sehr viele Events parallel laufen.
    - Du machst das echt so, dass du schaust, welche Gras-Events dein Held berührt, wie weit die von ihm Weg sind und dann die eine bestimmte Seite der entsprechenden Events aufrufst und so das Erscheinungsbild änderst.. Etwas abstrakter, aber vermutlich in der Masse besser zu regeln.

    Problem für mehrere Chars bei Variante 1: Du hast keine Kontrolle darüber, wie viele Events da aktiviert werden (setzt voraus, dass Events auch durch Berührung durch andere Events aktiviert werden können. Bin mir gerade nicht sicher, ob das direkt geht). Problem bei 2: Du müsstest diese Abfrage für jeden NPC durchführen.

    Da ist so etwas, was ich super gerne mal als Spielerei bauen würde, aber für ein richtiges Projekt vermutlich zu unhandlich wäre, ähnlich wie grafisch aufwändige Wettersysteme oder eigene Messagesysteme. Also beim 2k3 jedenfalls, ab XP wird das dann mit RGSS deutlich besser, aber da kenne ich mich nicht mit aus. Ich habe nur Ahnung von Events im 2k/3.

    Geändert von BDraw (21.10.2015 um 22:28 Uhr)

  5. #5
    Könnte man sowas in der Art nicht auch mit Animation-Events machen und die dann einfach auf Player'sTouch stellen?
    Das wäre zumindest meine Lösung gewesen?

  6. #6
    Ginge auch, das war jetzt so simpel, dass ich da gar nicht dran gedacht habe. ^^°
    Einziges Problem da bleibt die Masse der Events, aber da kommt man nicht drumherum. Müsste man schauen, wo es kritisch wird.

    Ich würde das Ganze gerne mal testen, müsste dazu aber den PC wechseln.

    Geändert von BDraw (21.10.2015 um 23:01 Uhr)

  7. #7
    Ihr meint also die Animationen mit einem externen Programm als gif erstellen und die dann laufen lassen, sobald jemand über das Feld läuft? mmh, das wäre auch ne Möglichkeit. Aber da sehe ich das Problem, dass das Event vom neuen Feld, das Event von dem Feld davor überlagert (der Radius soll ja schon über mindestens ein Feld in alle Richtungen von dem Startfeld des Events aus gehen. Eventuell (für bestimmte Ereignisse) sogar für einen größeren Bereich).
    Daher dachte ich, dass das mit den einzelnen Ebenen, die quasi übereinander liegen (längstes Gras ganz oben und zurückgezogenes ganz unten) und nur jeweils die oberen Ebenen in einem variablen Radius auf transparent setzen zu können. Meines Erachtens sollte das der Performance nicht allzu viel abverlangen. Sind ja nur ganz viele langsam schrumpfende Kreise, die um die Spielfigur (und NPCs) herum entstehen.
    Wenn man das nicht als Evente anlegt, sondern durch Scripte ausführen ließe, sollte das Performancemäßig dem System ja auch noch mal zugute kommen, oder?
    Solch eine Möglichkeit stelle ich mir für viele Sachen praktisch vor, daher dachte ich dass vielleicht schon mal jemand etwas in der Richtung programmiert hat. Oder hat wer von euch Lust sich da mal dran zu versuchen?

  8. #8
    Ich denke, du wirst schon einen Weg drumrum finden, den du auch selber umsetzen kannst.
    Kommt eben auf die Fläche an und den Effekt, denn du damit erzielen willst, denke ich.

  9. #9
    Zitat Zitat von Eddy131 Beitrag anzeigen
    Wie bitte? ^^'
    (Es soll auch bei anderen Personen funktionieren, das Gras ist ja nicht nur Fremdenfeindlich sondern auch bei Anwohnern versteckt es sich )
    Was ich aufgezählt habe sind die 4 Teilprobleme die du lösen musst.
    Zitat Zitat
    1) Eine Möglichkeit heraus zu finden, dass sich ein Event bewegt hat.
    Das hier könnte tatsächlich schon der schwierigste Punkt werden. Soetwas ist im RPG-Maker garnicht so einfach, vor allem nicht wenn du es nur für ganz bestimmte "Arten" von Events haben willst, nämlich den Helden und NPC's. Ich glaube die einfachste Möglichkeit wäre es die Game_Charakter (oder wie auch immer sie im neuesten Maker heist) Klasse umzuschreiben um eine Bewegung zu erkennen.

    Zitat Zitat
    2) Eine Möglichkeit alles Tiles zu kennen, welche Zeit basiert verändert werden müssen
    Du musst irgendwo speichern, wo das Gras zu wachsen hat. Das könnte relativ trivial werden. Ich würde wohl einfach eine Hashtable nehmen und Punkte (X- und Y-Koordinaten Tupel) auf Zeiten (Integer) abbilden.
    Du musst auch daran denken diese Daten zurück zu setzen wenn du die Map wechselst.

    Zitat Zitat
    3) Eine Möglichkeit die Zeit kontinuierlich hoch zu zählen falls nötig
    Das könnte man entweder über ein parallel-process Event machen, welches wiederum ein Ruby-Script aufruft, oder möglicherweise auch eleganter durch überschreiben einer geeigneten Klasse aus der Standard Bibliothek.
    Jedes Frame müsstest du über alle Gras-Tiles gehen, welche ein Update brauchen (genau die aus unserer Hashtable von Punkt 2) und die Zeit herunter zählen. Sobald die Zeit auf 0 gesunken ist kannst du die Tile-ID verändern.

    Zitat Zitat
    4) Eine Möglichkeit Tile-IDs beliebig zu setzen
    Das ist, zumindest im RPG-Maker XP, schwieriger als es sein muss. Ich kann mich errinern, dass es ein wenig Trial-And-Error gekostet hat bis es einigermaßen funktionierte Tiles dynamisch zu verändern.


    Alles in allem ist so ein Script durchaus möglich zu schreiben. Aber ich würde es schon sagen, dass es ein wenig Erfahrung braucht.

    Geändert von Cornix (22.10.2015 um 12:38 Uhr)

  10. #10
    Wie kamst du denn zu der Idee mit den verschiedenen Radien? Ich bin zwar noch nie durch ein ganzes Mimosen"feld" gelaufen, aber der von dir beabsichtigte Effekt tritt ja mW nur bei Berührung auf. Daher sollte es doch ausreichen, ein entsprechendes Event bei betretenen Tiles sowie den unmttelbaren Nachbarfeldern zu aktivieren (das der Effekt bei den Nachbarn nicht so ausgeprägt ist, würde ich aber auch erwarten).
    Zumindest würde es komisch wirken, wenn in ein Meter Entfernung vom (N)PC noch das Gras den Kopf einzieht.

  11. #11
    @Cornix: Oh, danke für die ausführlichere Antwort. Erstaunlicherweise sagt mir da einiges von was. Aber vor allem sagt es mir, dass ich nicht drum herum komme mich ein wenig in die Programmierung einzuarbeiten, wenn ich das so machen will. Ächz ^^'

    Zitat Zitat von Ark_X Beitrag anzeigen
    Wie kamst du denn zu der Idee mit den verschiedenen Radien? Ich bin zwar noch nie durch ein ganzes Mimosen"feld" gelaufen, aber der von dir beabsichtigte Effekt tritt ja mW nur bei Berührung auf. Daher sollte es doch ausreichen, ein entsprechendes Event bei betretenen Tiles sowie den unmttelbaren Nachbarfeldern zu aktivieren (das der Effekt bei den Nachbarn nicht so ausgeprägt ist, würde ich aber auch erwarten).
    Zumindest würde es komisch wirken, wenn in ein Meter Entfernung vom (N)PC noch das Gras den Kopf einzieht.
    Kennt jemand die (Hör-)Buch-Reihe Sturmlicht-Chroniken? Da hab ich mich ein wenig von inspirieren lassen, da ist es normal, dass das Gras und auch Bäume und andere Pflanzen ihre Blätter einziehen, da regelmäßig starke Stürme über die Welt toben und sie sonst abreißen würden. Das fand ich ganz cool beschrieben und dachte mir auch einen Ort zu machen, wo solche Pflanzen wachsen. Und je nachdem wie "schreckhaft" das Gras ist, kann es durchaus sein, dass sich die gesamte Wiese zurückzieht, wenn an einem Punkt eine Erschütterung auftritt. Eine Pflanze zieht sich zusammen, reibt und zupft dabei an Nachbarpflanzen die sich auch zusammenziehen und so weiter. Deshalb soll sich das ja kreisförmig um den Spieler herum ausbreiten. nach außen hin wird die Bewegung immer schwächer und die äußeren Gräser kommen daher auch zuerst wieder raus.
    Das Problem, dass ich bei Event pro Feld sehe, ist, dass ich dann ein Tropfenmuster habe: Ein Kreis, nach etwas abstand noch ein Kreis. Es soll eine gleichmäßige Linie erkennbar sein.
    Dann sehe ich noch ein anderes Problem: Wenn der Held von Feld F auf Feld G geht überlagern sich ja alle Effekte, die durch die Events der beiden Felder entstanden sind:

    A B C D
    E F G H
    K N O P

    Auf den 8 Feldern um F entsteht ein Kreis, genau so dann bei G. Und 6 der Felder sind teil von beiden Kreisen. Jetzt werden die Events von Feld F ausgelöscht/überlagert und die von Feld G starten. Das wird wohl nicht schön aussehen. Versteht ihr, was ich meine? Ich könnte auch Events für jede Art von Bewegung machen (von oben kommen, nach oben gehen, von links kommend, nach links gehend, von rechts kommend, ...) und da dann jeweils eine eigene Animation für machen, aber würde denk ich mal den Rahmen sprengen. Ganz zu schweigen von der Performance.

  12. #12
    Zitat Zitat von Eddy131 Beitrag anzeigen
    Das Problem, dass ich bei Event pro Feld sehe, ist, dass ich dann ein Tropfenmuster habe: Ein Kreis, nach etwas abstand noch ein Kreis. Es soll eine gleichmäßige Linie erkennbar sein.
    Ich hab' jetzt ganz spontan das Wiesenäquivalent eines Mach-Kegels vor Augen.

  13. #13
    Bei einer einzelnen Figur ist das ganze easy-peasy.

    Du machst ein Event, das das Gras repräsentiert. Du stellst es zwar auf die gleiche Höhe wie der Held, legst aber in seiner Route mit einem Schritt (der sich nicht wiederholt, also no repeat) auf Through schaltet. Du stellst die Animations- und Bewegungsfrequenz auf die niedrigste Stufe.
    Die Animation des Grases sollte also im Idealfall in 4 (oder wenns noch besser sein soll mehreren) Animationsteps über die 4 Blickrichtungen des Events passieren. Dann legst du fest, dass sich das Event bei Heldenberührung (Player Touch) Ohne Wartezeiten dazwischen ein mal dreht, und dann - nach einer kurzen Weile - wieder zurück.

    Bei mehreren Figuren wird es wirklich kompliziert. Die Abfrage mit x und y sollte aber auch funktionieren, wenn es nicht zu viele Events sind. Du müsstest dann auch ins Event programmieren, dass sich das Gras nur bei der ersten Berührung beugt und dann per Bedingung abfragen, ob man sich gerade darauf befindet.


    Naja lange Rede kurzer Sinn, ich hab hier mal hochgeladen was ich mir vorstelle:
    Klick klick

    Ich entschuldige mich für das Pseudo-Gras. Es ist wirklich kein grafisches Kunstwerk, aber es geht ja hauptsächlich um's Prinzip. xD
    Je länger die Spur umso länger die Wartezeit. Sollte der Verlauf nach hinten eher Kegelförmig sein, bräuchte man in der Eventgrafik vom Gras die Form von einem Quadrat das auf der Spitze steht.

    Geändert von Stray (23.10.2015 um 22:00 Uhr)

  14. #14
    @Stray: Danke für die Mühe.
    Aber das ist leider nicht ganz, dass ich mir vorgestellt hatte. Es soll schon so aussehen, als ob das Gras sich in einem großen Umkreis um der Figur herum versteckt (also mehrere Felder im Umkreis, aber besten auch einstellbar (manche Grasarten sind schreckhafter oder in Gegenden wo selten ein Mensch ist, ist es träger oder schreckhafter, je nachdem)). Und sobald sie weg ist oder stehenbleibt, soll das Gras ganz langsam wieder zurück kommen.
    Daher auch das mit den verschiedenen Gras-Ebenen, wo jede Ebene das gleich Gras nur etwas kürzer zeigt. Das sollte dann in etwa den Effekt haben, als ob das Gras sich einzieht.

  15. #15
    Das mit dem größeren Umfeld wäre dann mit verschiedenen Character-Größen für das Gras möglich. Die Geschwindigkeit und die Grafiken müsstest du dann nur individuell an deine Ansprüche anpassen.

  16. #16
    Zitat Zitat von Stray Beitrag anzeigen
    Das mit dem größeren Umfeld wäre dann mit verschiedenen Character-Größen für das Gras möglich. Die Geschwindigkeit und die Grafiken müsstest du dann nur individuell an deine Ansprüche anpassen.
    Das wäre tatsächlich ne Lösung
    Mir ist gerade (als ich deine Antwort las) eine geniale Idee gekommen! Ich hab das Problem immer von der falschen Seite betrachtet, wortwörtlich. Anstatt die einzelnen Schichten Transparent zu machen müsste ich nur die Grafik mit dem kürzeren Gras oben drauf legen und es als Grafik per Event auslösen lassen. Selbst bei größeren Kreisen über mehrere Flächen und Überlagerungen gäbe es keine Probleme, da es ja egal wäre, wenn 2 mal oder öfter die gleiche Grafik übereinander liegt.
    Ich müsste dann im Prinzip nur 4 Animationen erstellen (in jede der 4 Himmelsrichtungen gehen) und dann noch welche für auf die Grasfläche/von der Grasfläche runter gehen (muss dann schauen, welche Varianten ich da brauche).

    Jetzt fehlt mir nur noch eine Möglichkeit, dass die Reihenfolge er einzelnen Elemente festzulegen (also welches Bild über welchem gezeigt wird), damit dass kürzeste Gras immer das mittlere überlager und das immer das etwas längere (das längste wäre dann der Boden). Oder auch mehr, je nachdem wie viele ich brauche, damit es realistisch aussieht.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •