Leg-das-Rohr-Minispiel

  • #40, z MachtnixThursday, 20. April 2017, 14:30 hodinky 8 years ago
    Allerdings muss ich die Animationen nicht stoppen, sondern entladen ( und vorher sogar laden – warum eigentlich?). 

    Oh Manno...

    Kapitán

    1097 Posts


  • #41, z sebastianThursday, 20. April 2017, 16:48 hodinky 8 years ago
    sehr ungewöhnlich. Das kann im Endeffekt dann wieder nur einer der Devs wissen. 

    Kapitán

    2346 Posts

  • #42, z MachtnixThursday, 20. April 2017, 17:29 hodinky 8 years ago
    jede Animation läuft so lange bis sie zuende ist oder per Actionpart / Lua beendet wird. Jedes Objekt kann mehrere Animationen gleichzeitig haben. 
    Das stoppen kannst du bei so vielen Animation besser durch 4 Zeilen Lua lösen :

    for x=1, 156, 1 do
        animation = "Animations[animation_name_".. i .."]" 
      stopAnimation(animation) 
    end

    (davon ausgehend, dass die Animationen "animation_name_1" bis "animation_name_156" heißen 

    Nochmal für Doofe:

    Ich habe meine Animationen ursprünglich so benannt: jede Animation bekommt das Präfix des Feldes, also "Feld01-Integerwert".

    Animation Feld01-1 wäre also einfach ein leeres gerades Rohr (waagerecht). Das leere gerade Rohr für Feld02 würde demnach Feld02-1 heißen. Und für Feld 21: Feld21-1.

    Feld01-7 könnte die Einlauf-Animation von links nach rechts sein, und Feld01-8 dieselbe Animation von rechts nach links. Feld01-9 wäre eine Einlaufanimation in ein senkrechtes Rohr von oben nach unten, und Feld01-10 von unten nach oben. Usw.

    Wenn ich es hinbekomme, die Einlaufanimationen jeweils im letzten Frame zu stoppen (wo das Rohr ganz voll ist), brauche ich 18 Animationen pro Feld (6 + 2*6).
    Im Moment gelingt mir das noch nicht, deshalb habe ich weitere 6 Animationen mit gefüllten Rohren zusätzlich angesetzt. Der Deckel ist nur ein Bild und zählt nicht. Ich habe also insgesamt 450 Feld-Animationen (600 mit gefüllten Rohren), die eindeutig beschriftet sein müssen. Dazu noch die 6 Animationen für das Austauschfeld, die bleiben aber gleich.

    Das ist ein Riesen-Aufwand und deshalb überlege ich mir zur Zeit, wo ich sinnvoll kürzen kann. Am einfachsten wäre es, alle Animationen der Reihe nach stumpf durchzunummerieren, aber ich weiß dann später wirklich nicht mehr, was Animation 205 oder 137 bedeutet und wo die liegt... Abgesehen davon darf ich beim Eintragen keinen einzigen Fehler mache... Keine gute Idee.

    Also ist es bereits zu diesem frühen Zeitpunkt wichtig, die Benennung sinnvoll und ergonomisch einzurichten. Nachher alles zu ändern, wäre die Hölle. Vielleicht gibt es auch eine sinnvollere Benennung der Einzelelemente, die später in Lua gut bearbeitet werden kann. Für Tipps bin ich immer dankbar. Noch ist alles offen.

    Ich kapiere das mit den Anführungsstrichen nicht (übrigens habe ich das auch schon in PHP nie gerafft, ist aber auch schon zig Jahre her...).

    Ich muss also jeweils eine For-Schleife für den Wert des Feldes durchlaufen lassen und darin verschachtelt eine Schleife für die Animations-Nummerierung. Ich brauche also zwei Variablen (eine für das Feld und eine für die Animationsnummer) und für diese Variablen brauche ich Platzhalter. Wie schreibe ich das mit Anführungsstrichen?



    Kapitán

    1097 Posts

  • #43, z MachtnixThursday, 20. April 2017, 19:35 hodinky 8 years ago
    Rohrspiel Status Quo

    Die Einlaufanimation ist nur ein Platzhalter.

    edit:
    Habs probiert, aber es klappt vorne und hinten nicht (Kommandozeilenlog ist voll von Fehlermeldungen):
    -- Feldname: Feld1-1 usw.
    
    for x = 1,25,1 do -- Alle 25 Felder durchzählen
    
         
    for i = 1,18,1 do -- alle 18 Animationen pro Feld durchzählen
    
                animationstop="Animations[Feld"x"-"i]"
    
                stopAnimation(animationstop)
    
          end
    
    end

    Ich ahne aber etwas: vielleicht irritiert das Minus, ich darf meine Namen nicht mit einem Minus versehen...

    Kapitán

    1097 Posts

  • #44, z sebastianThursday, 20. April 2017, 20:09 hodinky 8 years ago
    wenn du variablen mit strings vermische  willst, musst du ".." als trennung zwischen diesen anwenden:


    "Animations[Feld"..x.. "-"..i.."]"

    Kapitán

    2346 Posts

  • #45, z MachtnixThursday, 20. April 2017, 20:22 hodinky 8 years ago
    Ah, danke. Super! Ich dachte wirklich, das wären nur Platzhalter für irgendwelche Namen smile

    Als Aktion existiert kein "Animation stoppen", es gibt nur "ausblenden". Benutze ich das, funktioniert es aber nicht. Ich glaube auch nicht, dass "entladen" und "stoppen" zum selben Resultat führen. Stoppe ich die Animation am Ende (mit einer Bedingung), klappt es nämlich auch nicht. Und die Funktion "entladen" gibt es nicht in Lua, oder?

    Kapitán

    1097 Posts

  • #46, z sebastianThursday, 20. April 2017, 20:23 hodinky 8 years ago
    nein nur start und stop. 
    Ich bin mir auch nicht sicher warum du bei dir unbedingt laden/entladen brauchst/nutzt. 

    Kapitán

    2346 Posts

  • #47, z MachtnixFriday, 21. April 2017, 17:32 hodinky 8 years ago
    Mit Aktionen wird das tatsächlich ein Fass ohne Boden. Außerdem funktioniert es schon beim zweiten Feld nicht mehr - keine Ahnung, warum...

    Ich muss wohl oder übel auf Lua ausweichen. Und da scheitere ich bereits an der einfachsten Aufgabe:
    Beim Linksklick auf ein Feld rufe ich ja ein Objekt auf. Ich muss nun wissen, welches Objekt gerade angeklickt wird. Diese Frage hatte ich schon mal gestellt (vor Monaten), doch ich habe imme noch keinen Plan, wie ich das herausbekomme. Gibt es so einen Befehl wie "get actual Objekt" (also, das Objekt das ich gerade anklicke)? Bei "getObject" picke ich mir ein bestimmtes heraus, das ich namentlich (oder mit ID) bestimmen muss. Das nützt mir nichts.
    Vielleicht mit "getName"? Visionaire kennt ja das aktuelle Objekt intern, irgendwo muss Name oder ID ja abgelegt sein, doch wie bestimme ich das in Lua? Schlimmstenfalls mit Abfrage der ID, doch leider sind die IDs nicht säuberlich durchgezählt... Muss ich tatsächlich den Umweg über die Abfrage der Mauscursorposition gehen? Das kann doch nicht sein.
    Ich habe Sebastians Tipps wieder und wieder gelesen, aber ich komme nicht weiter.

    Kapitán

    1097 Posts

  • #48, z sebastianFriday, 21. April 2017, 17:53 hodinky 8 years ago
    in der DataStructure gibt es ein Feld, welches das Objekt unter dem Cursor beinhaltet:   

     game.CurrentObject

    Bei einem klick auf ein Feld kannst du also immer das selbe Script bzw. Funktion ansprechen und in dieser dann per

    game.CurrentObject:getName() 

    den Namen des Objektes, der sich unter dem Cursor befindet nutzen und abfragen ob zB der Name des aktuellen Objekts gleich "Feld1" ist, etc . 

    Der Name ist NICHT der Name, der im Action Text auftaucht (ggf. ja je nach Sprache anders) , sondern der Name in deiner Objektliste

    Kapitán

    2346 Posts

  • #49, z MachtnixFriday, 21. April 2017, 18:17 hodinky 8 years ago
    Suuuuuuper! Bei "game" habe ich nie gesucht, sondern immer nur bei "object" usw... smile

    Das will ich ja erreichen: dass ich das Script nur einmal schreiben muss. Ich glaube, das ist der einsparende, tiefere Sinn einer Script-Sprache, oder?

    (Hab schon wunde Finger vom Eintippen von 400 Animationsvariablen...)

    Das Problem scheint zu sein, dass Visionaire die Variablen, die ich in irgendeinem Objekt festlege, in anderen Objekten nicht kennt. Oder nicht aktualisiert. Kommt mir jedenfalls so vor. Ich kann es mir nämlich nur so erklären, dass ich Animationen überhaupt laden und entladen muss.  Jetzt kann ich das Linksklick-Script gleich in die Mausaktionen legen und nicht auf jedes Feld einzeln...

    Vielleicht klappt es dann auch irgendwie mit nur einer Animation pro Feld, in der alles drin ist...

    Kapitán

    1097 Posts

  • #50, z sebastianFriday, 21. April 2017, 19:59 hodinky 8 years ago
    joar, macht Sinn^^

    Die Funktion, die per L-Klick auf ein Feld dann aufgerufen wird, sollte dann eine Bedingung abfragen, ob dieses Feld schon Wasser hat und falls nicht die Werte des Rohrs mit dem des auf dem "Ersatzstapel" liegenden tauschen.

    Kapitán

    2346 Posts