siggi Geschrieben 23. Dezember 2020 Geschrieben 23. Dezember 2020 Hallo, noch eine Frage vor den Festtagen: Wie spreche ich eine Benutzerdefiniertes Ereignis mit einer Variablen an? Wie das mit einem Objekt geht weiß ich inzwischen. -- Objekt mit einer Variable ansprechen local i = 1 local objWeiche = layout:getEntityByName("Weiche "..i) objWeiche.state = 1 -- Benutzerdefiniertes Ereignis mit einer Variable auslösen ?? $("BD Ausfahrt Gleis 1"):invoke() Ich möchte den Bezeichner "BD Ausfahrt Gleis 1" in Zeile 8 durch eine Variable ersetzen. Gruß Siggi
Goetz Geschrieben 23. Dezember 2020 Geschrieben 23. Dezember 2020 Hallo Siggi, Du willst den Namen des benutzerdefinierten Ereignisses, welches zu auslösen willst, einer Variablen entnehmen? Die Ereignisse werden (ebenso wie auch Objekte) nicht direkt über ihren Namen referenziert. Hinter allen Angaben mit vorangestelltem Dollar-Zeichen verbergen sich Adressen (die nur zur besseren Lesbarkeit namentlich dargestellt werden.) Du kannst daher den Namen nicht einfach durch eine Variable ersetzen, sondern müsstest zunächst anhand des Namens die Adresse des benutzerdefinierten Ereignisses ermitteln. Ähnlich, wie du es auch schon in der dritten Zeile für das Weichenobjekt tust. Das scheint mir aber überhaupt nicht sinnvoll. Kannst du bitte mal beschreiben, worauf du letztlich aus bist? Vielleicht gibt es einen eleganteren Weg als den Ereignisnamen per Variable zu übergeben. Du könntest beispielsweise für alle Fälle ein und dasselbe Ereignis verwenden und in der Klammer (hinter invoke) ein Argument übergeben, anhand dessen du im Ereignis unterscheidest, welchen Weg du einschlagen willst. Gruß Götz
siggi Geschrieben 24. Dezember 2020 Autor Geschrieben 24. Dezember 2020 vor 10 Stunden schrieb Goetz: Kannst du bitte mal beschreiben, worauf du letztlich aus bist? Vielleicht gibt es einen eleganteren Weg als den Ereignisnamen per Variable zu übergeben. Guten Morgen Götz, danke für deine Antwort! Ich habe 3 Gleise im Bahnhof und für jedes Gleis die Aktionen zur Abfahrt des Zuges in ein Benutzerdefiniertes Ereignis gepackt (Weichen, Signal stellen, Variablen belegen..). In bestimmten Situationen wird nun ein entsprechendes Gleis freigegeben. Ich dachte, es gibt in Lua eine Methode, ähnlich wie für die Objekte, auch für Ereignisse. Die Übergabe über das Argument <Voke> kenne ich auch, nur dann müsste ich wieder im Ereignis über <if then> die Wege trennen und das wollte ich vermeiden. Leider gibt es in Lua nicht die <select case> Methode. Aber jetzt feiern wir erst mal Weihnachten! Die und deiner Familie besinnliches Feiertage. Siggi
HaNNoveraNer Geschrieben 24. Dezember 2020 Geschrieben 24. Dezember 2020 Warum rufst du nicht in einem übergeordneten Ereignis, und einem Übergabe Parameter die einzelnen Ereignisse mit if then auf? Das sollte doch kein großer Aufwand sein. Gruß Thomas
Goetz Geschrieben 24. Dezember 2020 Geschrieben 24. Dezember 2020 vor 2 Stunden schrieb siggi: Leider gibt es in Lua nicht die <select case> Methode. Aber es gibt Tabellen. Wenn du also dein "select" Argument so gestaltest, dass du es als Tabellenindex verwenden kannst, dann musst du keine Fallunterscheidung treffen. Dann nimmst du einfach das, was in der Tabelle steht. Du kannst beispielsweise die unterschiedlichen Wege tabellarisch anlegen. Tabellen sind der Schlüssel zu Lua.
siggi Geschrieben 24. Dezember 2020 Autor Geschrieben 24. Dezember 2020 Danke für eure Antworten, im aktuellen Fall habe ich es nach dem ersten Vorschlag von Götz gelöst. vor 13 Stunden schrieb Goetz: Du könntest beispielsweise für alle Fälle ein und dasselbe Ereignis verwenden und in der Klammer (hinter invoke) ein Argument übergeben, anhand dessen du im Ereignis unterscheidest, welchen Weg du einschlagen willst. vor 6 Minuten schrieb Goetz: Tabellen sind der Schlüssel zu Lua. Ich habe auch schon viel mit Tabellen gelöst, nur noch nicht Ereignisse in Tabellen das werde ich dann als nächsten lernen. Euch noch schöne Feiertage. Siggi
Goetz Geschrieben 24. Dezember 2020 Geschrieben 24. Dezember 2020 vor 36 Minuten schrieb siggi: Ereignisse in Tabellen sind im 3D-MBS ganz bequem und für deinen Zweck vermutlich genau die richtige Lösung:
HaNNoveraNer Geschrieben 24. Dezember 2020 Geschrieben 24. Dezember 2020 (bearbeitet) Hallo @Goetz Wo liegt der Fehler? Ereignis aufrufen.mbp Bearbeitet 24. Dezember 2020 von HaNNoveraNer
Goetz Geschrieben 24. Dezember 2020 Geschrieben 24. Dezember 2020 (bearbeitet) vor einer Stunde schrieb HaNNoveraNer: Wo liegt der Fehler? in der falschen Adressierung. SelectCase ist keine Lua Tabelle. Sie gehört dem MBS. $("Ereignisse").variables["SelectCase"][1]:invoke() korrigierte Fassung: Ereignis umschalten.mbp Bearbeitet 24. Dezember 2020 von Goetz
HaNNoveraNer Geschrieben 24. Dezember 2020 Geschrieben 24. Dezember 2020 Achja, danke, ist ja eine Variable...
Goetz Geschrieben 24. Dezember 2020 Geschrieben 24. Dezember 2020 vor 3 Minuten schrieb HaNNoveraNer: ist ja eine Variable... ... eine Modul-Variable. Das ist das entscheidende
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren
Du musst ein Benutzerkonto besitzen, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen.
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden