Leg-das-Rohr-Minispiel

  • #70, z MachtnixSunday, 30. April 2017, 16:39 hodinky 8 years ago
    Danke. Ich war davon ausgegangen, dass eine Variable automatisch global ist, wenn ich nichts davor schreibe. Also besser global davor schreiben...

    Ich hatte einfach das Problem, dass ich bestimmte Variablen global brauche, damit sie überall abgefragt werden können. z.B. der Rohrtyp, der auf dem Stapel liegt. 

    Kapitán

    1097 Posts


  • #71, z MachtnixSunday, 30. April 2017, 22:14 hodinky 8 years ago
    "Global" vor einer Variable funktioniert nicht.
    Und ausgelagerte Funktionen kriege ich nicht hin, aus einem einfachen Grund:
    während ich mich im Editor nicht um die Variablen, die in einer Aktion liegen, kümmern muss (ich muss sie nur sorgfältig individuell durchzählen), rufe ich bei jedem Mausklick dasselbe  Script auf. Um herauszubekommen, welches Feld gerade angeklickt wurde und für welches Feld die Berechnung gerade stattfinden soll, habe ich die gesamte Berechnung in einer for-Schleife liegen. Mein aktuelles Feld ist also immer ein anderes.

    Jedenfalls baue ich in Lua nun die Editor-Aktions-Variante nach (die zwar funktioniert, aber tagelange Schreibarbeit erfordert...), aber sie klappt im Script nicht.

    Ich rufe das aktuelle Objekt ab, vergleiche es in der for-Schleife von 1-25 mit dem Feldwert und wenn das aktuelle Objekt gleich dem Feldobjekt ist, starte ich die eigentliche Berechnung exakt für dieses Feld, z.B. den Austausch mit dem Stapel oder die Mausklickabfrage. Für jedes Feld benötige ich nämlich einen eigenen Mausabfragewert (ob erst einmal oder bereits zweimal geklickt wurde).

    Da der Schleifen-Index i aber laut Wiki nur innerhalb der for-Schleife gültig ist, kann ich vorerst keine Aktionen auslagern, sondern muss sie komplett in diesem einen Script erledigen.

    Das Hauptproblem scheint nun die Gültigkeit der Variablen zu sein. Es passiert immer etwas, aber nie das, was ich erwartet habe... Im Grunde weiß ich nicht, was WIRKLICH beim Klicken geschieht...

    Jedenfalls bin ich noch nicht soweit, zu testen, wann welche Variablen gerade gültig sind und welchen Wert sie gerade haben (deswegen funktioniert die Lua-Variante noch nicht). Man kann sicher Variablen setzen, die in anderen Funktionen gültig sind, aber zur Zeit habe ich nicht mal den Überblick über mein einzelnes Script.

    Welche Funktion gibt es, um aus dem Lua-Script einen Hintergrundtext ausgeben zu lassen? Dann kann ich schnell Werte im Spiel anzeigen lassen. Momentan kann ich zwar per "print" alle Werte anzeigen lassen, aber eben nur in der Kommandozeile, was ziemlich umständlich ist.

    Kapitán

    1097 Posts

  • #72, z sebastianSunday, 30. April 2017, 22:48 hodinky 8 years ago
    "Global" vor einer Variable funktioniert nicht.
    global var_name = "test"

    sollte über all wo "var_name" abgefragt wird "test" zurückgeben.
    Sollte außerhalb von Funktionen in einem Definition Script stehen.
    Und ausgelagerte Funktionen kriege ich nicht hin, aus einem einfachen Grund:
    während ich mich im Editor nicht um die Variablen, die in einer Aktion liegen, kümmern muss (ich muss sie nur sorgfältig individuell durchzählen), rufe ich bei jedem Mausklick dasselbe Script auf. Um herauszubekommen, welches Feld gerade angeklickt wurde und für welches Feld die Berechnung gerade stattfinden soll, habe ich die gesamte Berechnung in einer for-Schleife liegen. Mein aktuelles Feld ist also immer ein anderes.
    Du kannst dein aktuelles Feld als Attribut in den Runden klammern für die aufgerufene Aktion übergeben.
    Da der Schleifen-Index i aber laut Wiki nur innerhalb der for-Schleife gültig ist, kann ich vorerst keine Aktionen auslagern, sondern muss sie komplett in diesem einen Script erledigen.
    korrekt. das i (oder welchen buchstaben oder wort du dort nutzt), welches zum Durchzählen gebrauht wird ist dann nur in der Schleife gültig, weil es dort definiert wurde.
    Du kannst aber andere Variablen von außen in der for schleife benutzen oder andere Werte innerhalb der for Schleife nach draußen "speichern". Was hindert dich eine andere Variable außerhalb zu definieren und in der vorschleife zu bearbeiten?
    Das Hauptproblem scheint nun die Gültigkeit der Variablen zu sein. Es passiert immer etwas, aber nie das, was ich erwartet habe... Im Grunde weiß ich nicht, was WIRKLICH beim Klicken geschieht...

    Jedenfalls bin ich noch nicht soweit, zu testen, wann welche Variablen gerade gültig sind und welchen Wert sie gerade haben (deswegen funktioniert die Lua-Variante noch nicht). Man kann sicher Variablen setzen, die in anderen Funktionen gültig sind, aber zur Zeit habe ich nicht mal den Überblick über mein einzelnes Script.

    Welche Funktion gibt es, um aus dem Lua-Script einen Hintergrundtext ausgeben zu lassen? Dann kann ich schnell Werte im Spiel anzeigen lassen. Momentan kann ich zwar per "print" alle Werte anzeigen lassen, aber eben nur in der Kommandozeile, was ziemlich umständlich ist.
    Seit kurzem kann man nun eine draw funktion verwenden, um Texte darzustellen. Habe aber da selbst noch nicht herausgefunden, wie man das Schritt für Schritt umsetzt. Entweder du lässt per print() im Log etwas ausgeben oder du speicherst lua-werte in einem ValueString eines VS-Wertes und lässt diesen anzeigen.

    Kapitán

    2346 Posts

  • #73, z MachtnixSunday, 30. April 2017, 23:12 hodinky 8 years ago
    global var_name = "test"

    sollte über all wo "var_name" abgefragt wird "test" zurückgeben.
    Sollte außerhalb von Funktionen in einem Definition Script stehen.

    Bei mir gibt es eine Fehlermeldung (die Zeile wird nicht abgearbeitet) und das Wort "global" ist im Editor auch nicht blau gekennzeichnet. Aber das mit dem Definitionsscript habe ich tatsächlich glatt übersehen - bei mir ist immer alles in Ausführungsscripts.
    Du kannst aber andere Variablen von außen in der for schleife benutzen oder andere Werte innerhalb der for Schleife nach draußen "speichern". Was hindert dich eine andere Variable außerhalb zu definieren und in der vorschleife zu bearbeiten?
    Stimmt natürlich, aber der Nutzen von Lua geht doch flöten, weil ich ja immer mit "Feld"..i.. arbeite. Ich könnte für jedes Feld eine Variable anlegen und die "nach draußen" weitergeben, aber dann habe ich ja wieder 25 verschiedene Variablen. Ich hatte gehofft, dass z.B. die drei Austauschwerte global sein würden, damit ich bei jedem Aufruf des Scripts die zuletzt angelegten Größen in den Variablen habe. Zur Zeit geht das noch nicht; offenbar sind andere Werte drin als ich vermute.

    Im Editor hatte ich das Problem nicht, weil jedes Feld seine ganz eigene Linksklick-Aktion und eigene Werte hatte, die ich nur innerhalb des Feldes abgearbeitet habe: ich habe z.B. den Typ19 mit der Austausch-Funktion19 und der Abfrage-Schleife19 bearbeitet, und es gab Zufallsgenerator19 und Mausabfrage19 und alle Animationen19. Jedes Feld war deshalb ein eigenes Universum für sich und strikt getrennt zu den anderen (bis auf die Stapel-Abfrage). Deshalb klappt das auch, ist nur ein Wahnsinns-Schreibaufwand.

    Aber nun in Lua muss ich erstmal rausfinden, wie ich die 25 Felder einzeln anspreche und - viel schlimmer - wann ich welche Werte holen und wann setzen muss! Ich darf also nicht vergessen, zusätzlich auch setValue zu benutzen, denn nur innerhalb des Lua-Scriptes nützen mir die Zahlen nichts...


    Kapitán

    1097 Posts

  • #74, z sebastianMonday, 01. May 2017, 12:41 hodinky 8 years ago
    es ist schwer dir zu folgen, was du gerade genau machst. Wohl auch, weil vieles einfach nur hier steht ohne Screenshots um es zu veranschaulichen. Es wirkt auch noch etwas so in meinen Augen, als dass du es dir schon wieder viel zu kompliziert machst grin Liegt aber wahrscheinlich auch daran, dass Lua und wie es gemeinsam mit VS genutzt wird noch nicht 100% innig hast ^__^

    Kapitán

    2346 Posts

  • #75, z MachtnixMonday, 01. May 2017, 16:00 hodinky 8 years ago
    Das mit dem „kompliziert“ wird wohl stimmen. smile Und dass ich Lua und Visionaire noch nicht zusammenbringe, stimmt auch. Das hatte ich die ja ganze Zeit geschrieben. 

    Du hast Recht: wenn ich irgendwo nicht weiterkomme, versuche ich eine andere Methode oder was anderes. Deshalb werde ich das Tauschen der Puzzleteile jetzt nicht in Lua verwirklichen, weil ich da auf keinen grünen Zweig komme. Es funktioniert mit Editor-Bordmitteln, aber ich muss zwei Tage lang stupide tippen. 

    Allerdings bleibt noch die Frage, wie ich die Wasserabfrage mache – und das gelingt wohl nur in Lua. Bloß wie man das lösen kann, weiß ich noch nicht. 

    Du meinst Screenshots vom Script oder vom Editor? Naja, wenn's was nützt...

    Kapitán

    1097 Posts

  • #76, z MachtnixMonday, 01. May 2017, 16:42 hodinky 8 years ago
    Hier sind einige Screenshots. Ich habe erst fünf Rohr-Felder angelegt, um den Austausch zu testen. Da in jedes Feld sicher noch jede Menge Aktionen reinkommen, die den Wassereinlauf steuern, muss ich erst dieses Problem lösen, bevor ich weiterkopiere.

    Außerdem wird noch in jedem Feld der Zufallsgenerator einzeln angeworfen, was ja bekanntlich dazu führen kann, dass z.B. 20 gerade Rohre erzeugt werden. Das Herauspicken aus einer vorsortierten Tabelle habe ich nicht hingekriegt.
     
    Um Routinen auszuprobieren und an- und abzuschalten, verschiebe ich sie im Aktionpart immer in eine Wenn-Dann-Bedingung, die nie erfüllt wird. Dort warten sie, bis sie gebraucht werden. Deshalb fliegt da oft eine Menge Zeugs rum, das gerade keine Funktion hat. In Lua würde ich einfach auskommentieren. Schade, dass man im Editor 4.2.5 keine Blöcke rauskopieren oder deaktivieren kann...

    Da ich es nicht hinbekommen habe, die sechs Standbilder in EINE Animation zu packen und ausschließlich den richtigen Frame (über die vorgeschlagene Methode) anzusprechen, gibt es sechs Einzelanimationen, die nur aus einem Bild bestehen. Dazu kommen jetzt noch die 12 Einlaufanimationen (je Feld!!).

    Wenn ich an einem bestimmten Frame stoppe, verschwindet die Animation - ich hatte tagelang geglaubt, beim "Stoppen" bleibt die Animation einfach nur stehen. So ist das doch auch bei einem DVD-Player, oder? ... Da sieht man, wie unterschiedlich ein Mensch und ein Computer denken... wink

    Das Lua-Script wimmelt noch von Testroutinen und Kommentaren. Ich habe eine Woche dafür benötigt, bin aber nicht wesentlich weitergekommen. Will sagen: ich kann nicht nachvollziehen, weshalb bestimmte Sachen nicht klappen (obwohl sie von der Logik her klappen sollten). Aber der gesunde Menschenverstand ist keine Programmierlogik. Vielleicht geht's besser mit der Wasserabfrage. Beide Methoden, wie das gehen könnte, habe ich hier ja schon mal angerissen - aber wie das in Lua aussehen soll... keine Ahnung.

    Kapitán

    1097 Posts

  • #77, z sebastianMonday, 01. May 2017, 17:48 hodinky 8 years ago
    es ist halt schwer nachzuvollziehen welche Ansätze du nun verfolgst ^^

    Lua Scripte schreibt man in der Skriptsektion eiiiiigentlich in Funktionen, damit man sie auch einzeln aufrufen kann, ohne dass sie dauernd aktiv sind wink
    Du arbeitest hier also hauptsächlich mit "call scripts" und nicht mit definition scripts, die Funktionen enthalten in der du übergabewerte oder ähnliches nutzen kannst.

    auch wenn es momentan nach eher einer Fleißaufgabe aussieht alles eher über Aktionparts zu machen, scheinst du ja an sich wesentlich voran zu kommen smile

    Kapitán

    2346 Posts

  • #78, z MachtnixMonday, 01. May 2017, 18:14 hodinky 8 years ago
    Tja, wesentlich ist relativ. Eigentlich klappte der Austausch eines Feldes bereits vor einem Jahr. Dann hatte ich damals ein zweites Feld angelegt und es klappte nicht mehr. Wochenlang habe ich rumprobiert und nicht verstanden, was los war. Deshalb entstanden für jedes Feld eigene Aktionen und Werte, offenbar konnte ich nicht mit nur einer Variable für alle Felder arbeiten. Visionaire legt immer individuelle Objekte an, die alle unterschiedlich sind.

    Dann habe ich ein Jahr pausiert und jetzt die Editor-Variante soweit hinbekommen, dass ich "nur" noch alle 25 Felder aufzufüllen brauche. Mir erschien das zu mühsam, deshalb dachte ich, den Austausch leichter mit Lua zu lösen - dann lerne ich auch gleich etwas. Aber das war ein Trugschluss.

    Man sieht deutlich, wie meine Herangehensweise von dem geprägt wird, was man als Mensch tun würde. Ich arbeite eher nach gefühlter Logik. Ich habe einen Linksklick, dort passiert etwas, und alles, was passiert, kommt in ein Script... Das muss natürlich ausführbar sein. Ich tappe immer von einem Schritt zum nächsten.

    Und wie man welche Werte von einer Funktion zur anderen bekommt, habe ich noch längst nicht drauf, denn wie soll ich eine Variable z.B. global in einem Definitionsscript definieren, die erst beim Mausklick überhaupt einen Wert bekommt..?

    Für jemanden, der selbst fit im Programmieren ist, mag das lächerlich erscheinen, aber erinnere dich doch mal an die Textaufgaben in der Schule... Bei einigen machte es niemals "klick", bei einigen nach zwanzig Anläufen, und einige Schüler sagten: "pah, ist doch logisch und einfach, das geht so und so..." smile
    Ich hoffe, ich gehöre noch zur mittleren Gruppe...

    Immerhin erspare ich mir inzwischen die Auflistung von 25 denselben Routinen; ich benutze die for-Schleife... wink Ist doch schon mal was.

    Auf jeden Fall vielen Dank für deine Hilfe.

    Test mit vier Feldern

    Kapitán

    1097 Posts

  • #79, z sebastianMonday, 01. May 2017, 20:37 hodinky 8 years ago
    Und wie man welche Werte von einer Funktion zur anderen bekommt, habe ich noch längst nicht drauf, denn wie soll ich eine Variable z.B. global in einem Definitionsscript definieren, die erst beim Mausklick überhaupt einen Wert bekommt..?
    Definitionssktipte werden beim Start des Spiels ausgeführt und daher auch dessen globale  Variablen angelegt (und lokale im Rahmen der im Skript aufgeführten Funktionen).

    Daher ist es auch wichtig, dass du deine Anweisungen, die zu einem späteren Zeitpunkt aufgerufen werden sollen in FUNKTIONEN packst, die du dann per Action Part aufrufen kannst.

    Ist der Haken bei Definition Script nicht gesetzt, ist es ein normales Sktipt, welches komplett durchlaufen wird, sobald du es erst aufrufst.

    Kapitán

    2346 Posts

  • #80, z MachtnixMonday, 01. May 2017, 22:07 hodinky 8 years ago
    Immerhin habe ich jetzt für die Abfrage, welcher Rohrtyp im Feld liegt und welche Animation jeweils gestartet werden muss, ein Mini-Script hingekriegt... wink
    Spare ich mir 300 händische Einträge (frei nach Homer Simpson: Juhuuh!!!)

    Diese Abfrage brauche ich ja demnächst auch für die Wassereinlaufabfrage.

    Kapitán

    1097 Posts