BauerHeini Posted March 14, 2020 Share Posted March 14, 2020 Hallo Programmierer, kann mir jemand helfen? Ich möchte bei folgendem Script in die Schleife eine Verzögerung einbauen: while $("Flamme").variables["Scale"] >= 0 do $("Feuer"):invoke($("Flamme").variables["Scale"]) $("Flamme").variables["Scale"] = $("Flamme").variables["Scale"] - 0.1 end "Feuer" ist eine benutzerdefiniertes Funktion: $("Flamme").transformation.scaling = scale "Flamme" ist das von NEO erstellte "Feuer" zu dem ich eine Variable "Scale" hinzugefügt habe. Ich komme mit dem" deferredcall" nicht klar. Mit Timer hat es auch nicht geklappt. Link to comment Share on other sites More sharing options...
metallix Posted March 14, 2020 Share Posted March 14, 2020 Hi Bauerheini Schreib doch einfach mal eine Verzögerung mit nachfolgender aktion in der grafischen Oberfläche und wandele diese anschließend in Script um..... Cheers Tom Link to comment Share on other sites More sharing options...
Goetz Posted March 14, 2020 Share Posted March 14, 2020 (edited) vor einer Stunde schrieb BauerHeini: Ich möchte bei folgendem Script in die Schleife eine Verzögerung einbauen Tu das bitte nicht. Eine Verzögerung hat in einer Schleife nichts verloren. Und die gestaffelten Befehle für die Änderungen deiner Flamme gehören nicht in eine Schleife. vor einer Stunde schrieb BauerHeini: Ich komme mit dem" deferredcall" nicht klar. Weil der nicht in eine Schleife passt. Schreib bitte einfach eine Folge von Aktionen untereinander, jeweils mit einer Verzögerung dazwischen. Wie das geht, kannst du in meinem Straßenbahn Beispiel sehen. Edited March 14, 2020 by Goetz Link to comment Share on other sites More sharing options...
BauerHeini Posted March 14, 2020 Author Share Posted March 14, 2020 Hallo Goetz, es ist ja nur eine Aktion, die mit ab- oder zunehmender Variablen ausgeführt wird. Ich möchte doch nur die Flamme kontinuierlich kleiner werden lassen. Das muss doch in einer Schleife gehen, oder? Link to comment Share on other sites More sharing options...
Goetz Posted March 14, 2020 Share Posted March 14, 2020 (edited) vor 15 Minuten schrieb BauerHeini: Das muss doch in einer Schleife gehen, oder? Nein, die Verzögerung geht in einer Schleife nicht. Und ohne Verzögerung würdest du alle Werte in sehr schneller Folge nacheinander in dieselbe Variable schreiben. Das braucht insgesamt weniger Zeit als ein Frame. Eine Verzögerung legt eine Art Sprungadresse an. Der Code wird dann an dieser Stelle verlassen und nach Ablauf der gewünschten Zeit springt das Skript wieder dorthin. Du kannst aber eine Schleife nicht temporär verlassen und dabei Schleifenzähler etc. beibehalten. Weder in Lua, noch in anderen Programmiersprachen. Edited March 14, 2020 by Goetz Ergänzungen Link to comment Share on other sites More sharing options...
BauerHeini Posted March 14, 2020 Author Share Posted March 14, 2020 vor 2 Minuten schrieb Goetz: Nein, die Verzögerung geht in einer Schleife nicht. Und ohne Verzögerung würdest du alle Werte in sehr schneller Folge nacheinander in dieselbe Variable schreiben. Das braucht insgesamt weniger Zeit als ein Frame. Eine Verzögerung legt eine Art Sprungadresse an. Der Code wird dann an dieser Stelle verlassen und nach Ablauf der gewünschten Zeit springt das Skript wieder dorthin. Du kannst aber eine Schleife nicht temporär verlassen und dabei Schleifenzähler etc. beibehalten. Weder in Lua, noch in anderen Programmiersprachen. Wie würde man denn dann eine Flamme kontinuierlich kleiner bzw größer werden lassen? Link to comment Share on other sites More sharing options...
Goetz Posted March 14, 2020 Share Posted March 14, 2020 (edited) Du könntest einen Timer starten und das Ende eines Durchlaufs als Auslöser verwenden, um eine Variable runterzuzählen. Und die Änderung dieser Variablen kannst du wiederum als Auslöser für den nächsten Animationsschritt nehmen. Oder du änderst jeweils direkt den Wert, der die Größe der Flamme bestimmt. Dabei prüfst du in einer Bedingung jedes Mal den Wert der Variablen. Ist der bei 0 angekommen, dann stoppst du den Timer. Für diesen Zweck sind die Timer in der EV geschaffen worden. Edited March 14, 2020 by Goetz Link to comment Share on other sites More sharing options...
BauerHeini Posted March 14, 2020 Author Share Posted March 14, 2020 Danke Goetz, das werde ich einmal ausprobieren. Link to comment Share on other sites More sharing options...
BauerHeini Posted March 14, 2020 Author Share Posted March 14, 2020 Es geht fast. Der Timer heißt "Flamme": $("Feuer"):invoke($("Ereignisse").variables["z"]) $("Ereignisse").variables["z"] = $("Ereignisse").variables["z"] - 0.1 if $("Ereignisse").variables["z"] <= 0 then $("Feuer").timers["Flamme"]:stop() end Nur das Beenden hat noch einen Fehler: [16:40:37] Skriptfehler (4): Unknown method or property name timers Link to comment Share on other sites More sharing options...
martin51 Posted March 14, 2020 Share Posted March 14, 2020 Hallo @BauerHeini dein Timer kann nicht im benutzerdefinierten Ereignis sein probier doch mal $("Ereignisse").timers["Flamme"]:stop() Gruß Martin Link to comment Share on other sites More sharing options...
BauerHeini Posted March 14, 2020 Author Share Posted March 14, 2020 vor 2 Minuten schrieb martin51: $("Ereignisse").timers["Flamme"]:stop() Danke martin51, aber das hat nicht funktioniert. Link to comment Share on other sites More sharing options...
martin51 Posted March 14, 2020 Share Posted March 14, 2020 (edited) @BauerHeini Wie sieht es bei dir aus? Wie heißt denn der Timer bei dir ? Edited March 14, 2020 by martin51 Link to comment Share on other sites More sharing options...
BauerHeini Posted March 14, 2020 Author Share Posted March 14, 2020 vor 3 Minuten schrieb martin51: BauerHeini Wie sieht es bei dir aus? Unter "Ereignisse" gibt es noch ein Ereignismodul "Feuer", und dort befinden sich die Scripte. P.S. Entschuldige, ich konnte den Screenshot nicht in die Unterhaltung einfügen. Muss ich auch noch lernen. Link to comment Share on other sites More sharing options...
Goetz Posted March 14, 2020 Share Posted March 14, 2020 vor 6 Minuten schrieb BauerHeini: Muss ich auch noch lernen. Jetzt wäre eine gute Gelegenheit dazu. Weil es hilfreich wäre. Link to comment Share on other sites More sharing options...
martin51 Posted March 14, 2020 Share Posted March 14, 2020 das verstehe ich schon, die Frage ist, wo hast du den Timer angelegt und wie heißt er siehe oben - Timer Link to comment Share on other sites More sharing options...
BauerHeini Posted March 14, 2020 Author Share Posted March 14, 2020 vor 2 Minuten schrieb Goetz: Jetzt wäre eine gute Gelegenheit dazu. Weil es hilfreich wäre. ...und, wie geht es. Habe versucht den Screenshot hier einzubringen. Kommt Fehlermeldung "Allowed file extensions are ..." Link to comment Share on other sites More sharing options...
BauerHeini Posted March 14, 2020 Author Share Posted March 14, 2020 (edited) vor 7 Minuten schrieb martin51: das verstehe ich schon, die Frage ist, wo hast du den Timer angelegt und wie heißt er siehe oben - Timer Wie beschrieben: es gibt ein Unterereignismodul, unter "Ereignisse" mit Namen "Feuer". Edited March 14, 2020 by BauerHeini Link to comment Share on other sites More sharing options...
Andy Posted March 14, 2020 Share Posted March 14, 2020 (edited) Dann heißt er $("Feuer").timers["Flamme"]:stop() Hoffentlich gibt es dann kein zweites Modul, was 'Feuer' heißt... Ein Objekt sollte man dann aber auch nicht Feuer nennen. In der grafischen EV wird eine direkte Referenz auf sowas aufgebaut. Eine einkopierte Zeile in Lua zwingt das MBS sich das Objekt selbst zu suchen - und das kann im falschen gleichnamigen Objekt/Modul enden. Gruß Andy Edited March 14, 2020 by Andy Link to comment Share on other sites More sharing options...
BauerHeini Posted March 14, 2020 Author Share Posted March 14, 2020 vor 4 Minuten schrieb Andy: Dann heißt er $("Feuer").timers["Flamme"]:stop() Hoffentlich gibt es dann kein zweites Modul, was 'Feuer' heißt... Gruß Andy Link to comment Share on other sites More sharing options...
martin51 Posted March 14, 2020 Share Posted March 14, 2020 ok. dann sollte es in etwa so aussehen @Andy das hat er schon probiert vor einer Stunde schrieb BauerHeini: Es geht fast. Der Timer heißt "Flamme": $("Feuer"):invoke($("Ereignisse").variables["z"]) $("Ereignisse").variables["z"] = $("Ereignisse").variables["z"] - 0.1 if $("Ereignisse").variables["z"] <= 0 then $("Feuer").timers["Flamme"]:stop() end Nur das Beenden hat noch einen Fehler: [16:40:37] Skriptfehler (4): Unknown method or property name timers Screenshot erstellen, als jpg speichern und dann steht da Datei hier her ziehen oder auswählen Link to comment Share on other sites More sharing options...
Andy Posted March 14, 2020 Share Posted March 14, 2020 (edited) Stimmt. Ich hatte zwar hoch gelesen, aber das wieder vergessen und mich nun an Deinem 'Ereignis' orientiert. Okay Heini, nenne das Modul um in: Feuermodul und dann muß es heißen:$("Feuermodul").timers["Flamme"]:stop() Da, wo er gestartet wird, solltest Du auch kontrollieren, ob er da automatisch umbenannt wurde. Gruß Andy Edited March 14, 2020 by Andy Link to comment Share on other sites More sharing options...
BauerHeini Posted March 14, 2020 Author Share Posted March 14, 2020 vor 9 Minuten schrieb Andy: Dann heißt er $("Feuer").timers["Flamme"]:stop() Hoffentlich gibt es dann kein zweites Modul, was 'Feuer' heißt... Gruß Andy vor 2 Minuten schrieb Andy: Stimmt. Ich hatte zwar hoch gelesen, aber das wieder vergessen und mich nun an Deinem 'Ereignis' orientiert. Okay Heini, nenne das Modul um in: Feuermodul und dann muß es heißen:$("Feuermodul").timers["Flamme"]:stop() Vielen Dank Andy, nach dem Umbenennen funktioniert es. Woran lag es? Link to comment Share on other sites More sharing options...
martin51 Posted March 14, 2020 Share Posted March 14, 2020 Bei BauerHeini ist Flamme ein Ereignis mit dem Inhalt Timer läuft ab, aber nicht der eigentliche Timer Flamme In diesem Ereignis wird erst etwas ausgeführt, wenn der Timer schon gestoppt hat Link to comment Share on other sites More sharing options...
Andy Posted March 14, 2020 Share Posted March 14, 2020 Eben, ich hatte es ja erklärt: Gleichnamigkeiten. Link to comment Share on other sites More sharing options...
BauerHeini Posted March 14, 2020 Author Share Posted March 14, 2020 Stimmt. Ereignismodul und Ereignis hatten denselben Namen. Vielen Dank noch einmal an Alle Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now