Jump to content

Benutzerdefiniertes Ereignis mit einer Variablen auslösen


siggi
 Share

Recommended Posts

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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. 

Link to comment
Share on other sites

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

 

Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...