Leg-das-Rohr-Minispiel

  • #30, z MachtnixMonday, 17. April 2017, 19:22 hodinky 8 years ago
    Stimmt. Die interne ID ist ja verschieden. Doch für mich ist es mühsam, zwischen 182 gleichlautenden Werten zu wählen. Um in Lua allerdings weiterzukommen, müsste ich irgendwie an die eindeutigen Werte rankommen – entweder über die Vis-ID oder über indizierte Namen. Die Arbeit, alle Anis und Werte eindeutig zu benennen, muss ich mir also oder so machen...

    Kapitán

    1097 Posts


  • #31, z sebastianTuesday, 18. April 2017, 00:02 hodinky 8 years ago
    Also jetzt doch Lua? 
    schau mal hier:


    (das (CMS) muss mit in den Link.. das missinterpretiert das Forum grade) 

    sprich solange der Objektname des Feldes einzigartig ist, kannst du die Values ruhig gleich nennen

    PS: der oben gezeigte Link verweist noch auf die alte Methode differenzierter auf Objekte einzugehen. Sollte aber noch klappen. 

    Kurzmethode sollte ungefähr so gehen:

    SceneObjects["feld1"].ObjectValues["value_name"]
    
    SceneObjects["feld2"].ObjectValues["value_name"]
    
    SceneObjects["feld3"].ObjectValues["value_name"]

    verweist auf 3 verschiedene aber gleich benannte Values. 

    Füge ein .ValueInt hinten an, um den Zahlenwert des ValueObjekts zu bekommen/zu setzen (je nachdem auf welcher Seite einer Gleichung du das Objekt setzt) . 


    Kapitán

    2346 Posts

  • #32, z MachtnixTuesday, 18. April 2017, 00:40 hodinky 8 years ago
    Erstmal vielen Dank, dass du noch mitspielst!

    Ob Lua oder nicht, weiß ich selbst noch nicht. Ohne wird's nicht gehen, befürchte ich. Deine Hinweise sind jedoch ein Stück zu kompliziert, weil ich mit der Vis Objektstruktur noch ganz am Anfang bin. Mein Hauptproblem ist sowieso das Umsetzen von Problemen in Programmierlogik, deshalb leistet mir der Vis Editor als "Spielwiese" gute Dienste. Das ist ja "Programmieren" für Dummys... wink

    Für mich ist Lua eine Art Quarantänezone, in die ich nur mühsam rein- und rauskomme. Ich kann dort die tollsten Schleifen basteln - es scheitert daran, die Werte irgenwie "ins Spiel" zu kriegen; die Werte bleiben drin und nichts kommt raus... Das ist wie ein eingekapseltes Gehirn ohne Kontakt zur Außenwelt. Dazu muss ich das "Interface" beherrschen, und das kann ich ganz und gar nicht. Das Einsetzen von irgendwelchen Werten in irgendwelche Vis-Objekte ist für mich erstmal undurchschaubar.

    Mit den Aktionen und Werten kann ich schnell im Editor was ausprobieren. Wenn ich es also schon dort nicht hinbekomme, dass ich zwei Felder wie gewünscht austauschen kann, muss bereits dort ein tiefer Denkfehler drin sein. Und das mit den drei Austauschvariablen will mir z.B. partout nicht gelingen, obwohl ich nicht verstehe, wo der Fehler sitzen könnte... Wahrscheinlich Pipieinfach...

    GetObject ist sinnvoll - ich habe die "lange" Schreibweise bereits genutzt. War aber ein tagelanges Probieren, bis ich die richtige Syntax (mit V oder ohne, Mehrzahl oder nicht, usw...) raushatte. Im Moment brauche ich wohl erstmal einen Masterplan...

    Kapitán

    1097 Posts

  • #33, z sebastianTuesday, 18. April 2017, 07:52 hodinky 8 years ago
    aber genau dafür sind ja die oben genatten Lua Abfragen: Damit du Werte und Bedingungen zwischen beiden Welten wechseln kannst:

    SceneObjects["feld1"].ObjectValues["value_name"]. ValueInt = 5 
    setzt den Int Wert des Wertes "value_name" des Szenenobjektes "feld1" auf 5

    SceneObjects["feld1"].ObjectValues["value_name"]. ValueString = "Bread" 
    setzt den String Wert des Wertes "value_name" des Szenenobjektes "feld1" auf "Bread" 

    i = SceneObjects["feld1"].ObjectValues["value_name"]. ValueInt = 5 
    Setzt die Luavariable i auf den Wert 5

    i = SceneObjects["feld1"].ObjectValues["value_name"]. ValueString = "Bread" 
    Setzt die Luavariable i auf den Wert "Bread" 

    (lua werte sind zustandslos. Können zahlen oder Worte enthalten) 

    SceneObjects["feld1"].ObjectValues["value_name"]. ValueInt = SceneObjects["feld_tausch"].ObjectValues["value_name"]. ValueInt

    Setzt den Wert value_name des Sceneobjekts "feld1" auf den selben Wert wie value_name von "feld2"

    Die oben genannten Abfragen beziehen sich jetzt auf Szenenobjekte. Falls du es Global halten willst nutzt du einfach
    Values["value_name"].ValueInt
    Dies birgt aber wie du schon erwähnt hast das Problem, dass wenn es mehrere gleichnamigen Werte gubt, dass VS sich dann vermutlich den ersten Wert nimmt, den er findet. 

    Für Conditions gibt es
    Conditions["cond_name"].ConditionValue = true/false

    Kapitán

    2346 Posts

  • #34, z MachtnixTuesday, 18. April 2017, 14:30 hodinky 8 years ago
    Whow! Das war eine große Hilfe (obwohl es so ähnlich im Wiki steht)! Ich quäle mich immer durch den englischen Text dort und bin mir nie sicher, ob ich alles korrekt verstanden habe...

    Probiere ich demnächst anstatt der Aktionen aus. 

    Kapitán

    1097 Posts

  • #35, z MachtnixTuesday, 18. April 2017, 19:09 hodinky 8 years ago
    Seit zwei Tagen versuche ich nichts anderes, als herauszubekommen, warum bei der Linksklick-Aktion der wechselseitige Austausch nur einmal klappt. Die  Werte werden zwar aktualisiert, die dazugehörigen Animationen aber nicht. Wenn das bei so simplen Dingen schon nicht klappt, wie frustrierend wird das erst bei der Wasserabfrage. 

    Kapitán

    1097 Posts

  • #36, z MachtnixWednesday, 19. April 2017, 19:44 hodinky 8 years ago
    Offenbar funktioniert Visionaire mit anderer Logik...

    Ich habe (später für jedes Feld) in einer Linksklick-Aktion zwei Klick-Abfragen. Klicke ich das erste Mal drauf, wird der Deckel gelüftet und ein Zufallsgenerator erzeugt einen von 6 Integer-Werten. Ich weise den Zufallswert dem Feldwert zu. Danach starte ich eine Aktion "Abfrage", die jeden Feldwert abfragt und davon abhängig die entsprechende Animation startet: wenn Wert=3, starte Animation Nr. 3. Danach setze ich die Klickbedingung (oder einen Wert) auf wahr und beende die Aktion, denn sonst würde ja sofort die zweite Bedingung abgefragt werden.

    Das funktioniert.

    Beim zweiten Klick ist die Klick-Variable wahr, deshalb wird sofort zur zweiten Bedingung gesprungen, in der ich die Austausch-Aktion starte. Ich habe es anfangs mit drei Variablen probiert, nun habe ich vier (macht aber keinen Unterschied, ich dachte nämlch, der nachfolgende Fehler läge dort...).

    Nachdem der Austausch vollzogen wird, starte ich hintendran die Aktion "Abfrage" (das heißt, der Feldwert ist jetzt tatsächlich ein anderer, denn ich habe ihn ja mit dem Außenfeld vertauscht. Durch einen Test-Text oder in der Kommandozeile wird das bestätigt).
    Das Merkwürdige ist nun: die Variable wird zwar bei jedem Linksklick vertauscht (die Aktion funktioniert also wie sie soll), allerdings wird durch die folgende Abfrage-Funktion die Animation nicht erneuert. Dabei müsste sich doch, wenn sich der Wert ändert, auch die passende Animation ändern. Seit zwei Tagen habe ich verschoben, probiert, mit Rechtsklick gefummelt - nichts hilft.

    Ich vermute, dass der Feldwert oder die Animation in irgendeinem Cache liegt. Denn manchmal vertauscht Visionaire das Bild (jede Animation besteht nur aus einem Bild) plötzlich beim Start eines neuen Spiels. Da wurde also irgendwo etwas zwischengespeichert, was nicht zwischengespeichert sein darf.

    Erstaunlicherweise macht Visionaire ab und zu auch einen Unterschied zwischen "aktueller Aktion beenden" und "Aktion (Name) beenden", obwohl es doch dasselbe ist, oder?

    Jetzt schaue ich mir erstmal einen Disney-Film an und mache mir eine Tüte Chips auf... smile

    Kapitán

    1097 Posts

  • #37, z MachtnixThursday, 20. April 2017, 00:07 hodinky 8 years ago
    Tatsächlich: es funktioniert, wenn ich die Animationen beim Beenden entlade. Leider geht das wohl nicht global. Deshalb muss ich jede einzelne Animation einzeln anwählen und am Ende entladen. Macht 156 Stück. Das bläht die Aktionen kolossal gigantisch auf... Wahrscheinlich ist es so nicht möglich, allein im Editor zu arbeiten (jedenfalls nicht ohne tagelanger Fließbandarbeit...).

    Kapitán

    1097 Posts

  • #38, z sebastianThursday, 20. April 2017, 08:46 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 

    Kapitán

    2346 Posts

  • #39, z MachtnixThursday, 20. April 2017, 14:24 hodinky 8 years ago
    Ja, so eine Schleife in Lua nimmt mir viel Arbeit ab. Danke für den Code. 

    Aber das Anlegen der Animationen ist die eigentliche Sisyphos-Arbeit. Lua macht das nicht für mich: kann keine Objekte erzeugen. Ich muss also in jedes Feld rein und händisch anpassen. Deswegen möchte ich ZWEI Felder komplett fertigbasteln, die werden dann kopiert und umbenannt. 

    Und es sind ein paar mehr Animationen: pro Feld 6 leere Rohrstücke, 12 Einlauf-Animationen und 6 volle Rohre... Macht über 600. Gut, beim Einlaufen kann ich auf dem letzten Frame stehenbleiben, kann ich Anis sparen. 

    Und bei allen muss ich die Indices manuell setzen 

    Kapitán

    1097 Posts

  • #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