Jump to content

BauerHeini

Members
  • Content Count

    77
  • Joined

  • Last visited

Posts posted by BauerHeini


  1. 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?


  2. 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".

    image.thumb.jpeg.2c4c08b47bbb1619e346aed4e4249674.jpeg


  3. 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

     


  4. 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?


  5. 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.


  6. Entschuldige Neo, dass ich erst jetzt antworte. Ich hatte diese Feature-Wunsch hier eingestellt mit der Hoffnung, dass er eventuell angenommen wird und deshalb nicht auf eine Antwort gewartet. Aber jetzt zu der Frage, wofür die Informationen benötigt werden.

    1. Ich habe bei Gleisen und auf Straßen eine Bremsspur eingerichtet, bei denen per Funktion, bei Betreten, die Verzögerung bis zum Ende der Spur auf ein bestimmtes Tempo berechnet wird. Hierzu benötige ich u.A. die Länge der Spur. Diese kann ich aus den Angaben "Lg/Rad", "Winkel" und "Maßstab" errechnen. Momentan muss ich diese Informationen als Variable bzw. Konstante zu jedem Objekt hinzufügen. Nachteil: großer Aufwand und bei Änderungen dieser Werte wird häufig vergessen, die Variablen mit zu ändern.

    2. Bei einem Hausbrand habe ich die Flamme beim Löschen so animiert, dass ich mehrere abklingende Flammengrößen handisch erstellt habe, die dann mit zeitlicher Verzögerung ein-  bzw. ausgeblendet werden. Dies liesse sich elegant lösen, wenn man entsprechende Werte auslesen und ändern könnte (wie man es ja auch händisch im 3D-Modelleditor machen kann).

    Viele Grüße

    BauerHeini


  7. Hallo Timba, ich kann sie berechnen aus "Lg/Rad" und "Winkel". Dafür habe ich ja die Funktion "Laenge" erstellt. Nur hierzu müßte ich eben die Konstanten aus dem Modelleditor auslesen können. Das wäre jetzt mal eine Frage an den "Erbauer" des Programms Stefan Werner. Denn wenn die Daten im Modelleditor zu finden sind, dürfte es ja nicht allzu schwer sein sie auch per Funktion auszulesen.


  8. Ok, was ich meine ist:

    1. Meine Funktion habe ich als benutzerdefiniertes Ereignis mit Namen "Kreisbogen" angelegt:

    function Laenge(Alpha, Radius)
    local l = Alpha / 360 * 2 * math.pi * Radius
      return l
    end

    Die Testabfrage per Taster lautet:

    $("Beschriftung").text = Laenge(90, 10)

    Die Fehlermeldung lautet:

    [11:05:14] Ereignis-Protokollierung gestartet
    [11:05:18] Schalter wird betätigt -> Taster, 0
    [11:05:18]     Schalter wird betätigt
    [11:05:18]         Skriptfehler (9): attempt to call a nil value (global 'Laenge')

    2. Um die Länge eines Objekt auszulesen geht...

    $("Beschriftung").text = $("G01").variables["Lg/Rad"]

    auch nicht. "G01" ist ein Gleis.


  9. Liebe Programmierer und MBS-Freunde,

    ich habe mir ein/e Gleis/Spur gebastelt, die mir mit einem Skript ein Fahrzeug auf eine bestimmte Geschwindigkeit bringen soll:

    Fahrzeug betritt ein Gleis/Straße mit Schlagwort "Signalgleis"

    local l       --LgRad
    local sp = 0  --Speed

    if track.variables["Signal"].state == 2 then
      sp = track.variables["Signal"].variables["Tempo"]
    end

    if track.variables["Alpha"] ~= 0 then --[[Kurve--]]
      l = math.pi / 180 * track.variables["LgRad"] * track.variables["Alpha"] * $("Ereignisse").variables["Massstab"]
    else
      l = track.variables["LgRad"] * $("Ereignisse").variables["Massstab"]
    --  l = track.size.y
    end

    $("Bremsen"):invoke(0, vehicle, l, sp)

    -----------------------------------

    benutzerdefiniertes Ereignis

    --[[Parameter:
    Delta = ev. Bremswegverlängerung
    Fahrzeug = auslösendes Fahrzeug
    Laenge = auslösende Spurlänge
    Zieltempo
    --]]
    local v = Fahrzeug.currentSpeed / 3600 * 1000  --Umrechnung in m/s
    local s = Laenge - Delta
    local a = (v ^ 2) / (2 * s)

    Fahrzeug.deceleration = a
    Fahrzeug.targetSpeed = Zieltempo

    Nun habe ich zwei Fragen.

    1. Kann man die Variablen, die ich in den Gleisen/Strassen eingebunden habe, wie LgRad oder Alpha (Geometrie: Lg/Rad bzw Winkel) oder den Maßstab, per Programm auslesen?

    2. Wie kann man eine LUA-Funktion erstellen und benutzen? Ich habe das LUA-Tutorial von Goetz gelesen und mir eine Funktion in einem benutzerdefiniertem Ereignis erstellt. Aber wie könnte ich eine Variable bestücken mit dem Wert aus der Funktion? Ich habe ja nur den Namen des benutzerdefinierten Ereignisses und nicht der Funktion.

    In freudiger Erwartung auf Antworten

    BauerHeinz

×