Animation für die jeweils zeigende Richtung abspielen lassen

  • #1, z Hoschi.380Friday, 15. July 2016, 21:27 hodinky 8 years ago
    HiHo, ich hab da leider ein größeres Problem und bräuchte bitte etwas Hilfe

    Und zwar: Mein Hauptcharakter verfügt über eine Hebeanimation für jede (8) Richtung, und diese soll beim Druck auf Knopf A (Gamepad) für die jeweilige Richtung abgespielt werden, in dem der Charakter gerade zeigt. Auch sofern es gar nichts zum aufheben gibt. Bisher hab ich es nur geschafft, eine fest vorgegebene Richtung abspielen zu lassen.

    Ist mein Vorhaben überhaupt machbar?

    Bažant

    10 Posts


  • #2, z sebastianFriday, 15. July 2016, 23:09 hodinky 8 years ago
    Ja, mit ein paar if Bedingungen geht das.
    Und zwar gibt es den actionpart "if character is aligned to"
    Hier kannst du dann die gradzahl angeben. Innerhakb des if-s kannst fu dann für die entsprechende Richtung die passende animation abspielen. Das ganze dann x8 smile

    Kapitán

    2346 Posts

  • #3, z Hoschi.380Saturday, 16. July 2016, 13:32 hodinky 8 years ago
    Klasse, Danke!

    Gibt es da vielleicht eine genauere Anleitung an Hand eines Beispieles im Wiki? Quasi etwas für Dummies? confuse

    Bažant

    10 Posts

  • #4, z MachtnixSunday, 17. July 2016, 16:51 hodinky 8 years ago
    In etwa: wenn Charakter nach NO zeigt, spiele Animation "Hebeanimation in NO-Richtung" ab. Zeigt der Charakter nun nach S, müsste er also eine Abfrage bekommen: "wenn Charakter nach S zeigt, spiele Hebeanimation nach S ab". Das ganze Paket von 8 Bedingungen kommt dann in die Aktion, die beim Drücken des A-Knopfs aufgerufen wird.

    Ich persönlich würde die if-Abfragen nicht verschachteln, sondern stur eine nach der anderen untereinander auflisten. Nachdem das Programm eine Abfrage gecheckt hat und sie für falsch befindet, springt es automatisch zu der darunterliegenden und macht da mit der nächsten Abfrage weiter. War die Bedingung zufällig richtig, wird sie abgearbeitet - und deshalb könnte in jeder Abfrage zusätzlich ein Abbruchbefehl stehen (springe zum letzten Aktionsteil), denn sonst arbeitet es immer ALLE 8 Bedingungen ab, egal, ob die erste falsch oder wahr war. Logischerweise kann ja immer nur EINE der acht Bedingungen wahr sein und zwar immer nur genau eine (aber siehe Hinweis unten). Geht natürlich auch so, ist nur langsamer.
    Sollte sich der Charakter in der Zwischenzeit drehen, könnte die Abarbeitung vielleicht auch ins Leere laufen (aber ich glaube, während einer Aktionsabfrage ist der Charakter "eingefroren" und man kann eh nichts machen, oder?)

    Ich habe allerdings noch einen Hinweis: selbst wenn es nach außen nur 8 45°-Richtungen gibt, so sind die Richtungen INTERN nicht gerundet. Der Charakter weist also z.B. in Richtung 37,5°. Es sieht aber so aus, als stünde er in 45°-Richtung. Das Programm entscheidet selbständig. Das geht im allgemeinen gut, ich habe mir aber angewöhnt, in Lua einige Script-Zeilen einzubinden und aufzurufen, die in etwa folgendes machen: ist die Figur innerhalb eines Achtelkreis-Bereichs von z.B. 271° bis 22° ausgerichtet (innerhalb 22,5° nach links und rechts von 0°), setze Figur-Richtung auf 0°. Jede der acht Richtungen bekommt also einen Segmentraum zugewiesen. Ich weiß jetzt gerade nicht, wie die Gradeinteilung in Visionaire ist, deshalb habe ich mal 0° für 12 Uhr angenommen.

    Aber mit der einfachen Ausrichten-Aktion sollte deine Aufgabe klappen. Ich habe das gebraucht, weil ich die Winkelrichtungen in Lua direkt abgefragt habe und da trat das Phänomen auf.

    Kapitán

    1097 Posts

  • #5, z sebastianSunday, 17. July 2016, 19:41 hodinky 8 years ago
    @Machtnix: Du und Lua? Biste krank grin?

    0° ist nach Rechts zeigend, 90° Oben, 180° Links, 270° Unten

    Kapitán

    2346 Posts

  • #6, z MachtnixSunday, 17. July 2016, 20:14 hodinky 8 years ago
    Ah, ich wusste doch, dass in Visionaire das etwas anders war als sonst überall ;-)

    Krank? Naja, ich hab eine von diesen blauen Pillen genommen (oder war es doch die rote...?) und jetzt bin ich mutig wie nur was... *Power-Modus*...

    Sagen wir es mal diplomatisch: wenn ich erstmal gezwungen bin, in Lua reinzugehen (also ein Script anzufertigen für etwas, das sonst nicht geht), ist es tatsächlich unpraktisch, wieder rauszuspringen (in den Editor), dort Abfragen zu machen und wieder zurückzugehen ins Script, um die Abfragen zu bearbeiten. Ich hab dann immer so Drei-Zeilen-Scripte, die ich an tausend Stellen aufrufe. Irgendwann nervt das natürlich, also: warum nicht gleich in Lua bleiben...? Ich kann AFRLme voll verstehen (einmal Lua, immer Lua) - es ist leider nur ein mühsamer Prozess. Ähnlich wie Zehnfingertippen: zuerst ist man langsamer als mit zwei oder vier, aber dann...

    Kapitán

    1097 Posts

  • #7, z Hoschi.380Thursday, 21. July 2016, 16:17 hodinky 8 years ago
    Danke für die ausführliche Antwort. Irgendwo mache ich gerade einen gewaltigen Denkfehler und es klappt einfach nicht

    Aktuell habe ich unter Personen der Hauptperson folgende Aktion hinzugefügt:

    „Nimm angewandt(sofort), Befehl auf Person angewandt, Befehl Nimm, Skript ausführen

    Skript:
    local char = game:getLink(VGameCurrentCharacter)
    
    function checkDir()
    --East
    if char:getInt(VCharacterDirection)>=0 and char:getInt(VCharacterDirection) <=44 then startAnimation("Animations[PickUpR]")
    -- North East
    elseif char:getInt(VCharacterDirection)>=45 and char:getInt(VCharacterDirection) <=89 then startAnimation("Animations[PickUpHR]")
    -- North
    elseif char:getInt(VCharacterDirection)>=90 and char:getInt(VCharacterDirection) <=134 then startAnimation("Animations[PickUpH]")
    -- North West
    elseif char:getInt(VCharacterDirection)>=135 and char:getInt(VCharacterDirection) <=179 then startAnimation("Animations[PickUpHL]")
    -- West
    elseif char:getInt(VCharacterDirection)>=180 and char:getInt(VCharacterDirection) <=224 then startAnimation("Animations[PickUpL]")
    -- South West
    elseif char:getInt(VCharacterDirection)>=225 and char:getInt(VCharacterDirection) <=269 then startAnimation("Animations[PickUpVR]")
    -- South
    elseif char:getInt(VCharacterDirection)>=270 and char:getInt(VCharacterDirection) <=314 then startAnimation("Animations[PickUpV]")
    -- South East
    elseif char:getInt(VCharacterDirection)>=315 and char:getInt(VCharacterDirection) <=359 then startAnimation("Animations[PickUpVL]")
    end
    end
    


    Unter Tastenaktionen hab ich bei ButtonA die Aktion "Nimm" angewandt(sofort) starten confuse

    Bažant

    10 Posts

  • #8, z sebastianThursday, 21. July 2016, 23:08 hodinky 8 years ago
    und "checkDir()" wird auch als script ausgeführt? bis jetzt hast du nur eine funktion definiert...

    Kapitán

    2346 Posts