Jump to content

Animated train door problem...


Empfohlene Beiträge

Good evening...

I have just spent the afternoon and evening getting a train to stop at a platform, open its doors, wait, close the doors, then start off. Not a great problem using the interface, but I also used Keywords for the first time, and that complicated things. It's done now, but there remains a problem; I'm hoping for a solution.
The train consists of an ET420 as engine, then an ET421 and a revers ET420. This is doubled, so there are six coaches in all. Here's the problem...

The animation I require is for the left doors to open. This works for the coaches facing forward, but opens the 'wrong' doors for the reversed coaches. As I'm controlling them all with one Keyword, it's convenient, and all the doors for the whole train open at once. Is there any simple way to have the reverse coaches understand that they are reversed..? Do I have to give these 'exceptions' a different Keyword..? Here's a screenshot of the train... 

Guten Abend...

Ich habe gerade den Nachmittag und Abend damit verbracht, einen Zug dazu zu bringen, an einem Bahnsteig anzuhalten, seine Türen zu öffnen, zu warten, die Türen zu schließen und dann loszufahren. Kein großes Problem bei der Verwendung der Benutzeroberfläche, aber ich habe auch zum ersten Mal Schlüsselwörter verwendet, und das komplizierte Dinge. Es ist jetzt fertig, aber es bleibt ein Problem; Ich hoffe auf eine Lösung.
Der Zug besteht aus einem ET420 als Motor, dann einem ET421 und einem Rückwärts-ET420. Dies wird verdoppelt, so dass es insgesamt sechs Trainer gibt. Hier ist das Problem ...

Die Animation, die ich benötige, ist, dass sich die linken Türen öffnen. Dies funktioniert für die nach vorne gerichteten Reisebusse, öffnet jedoch die "falschen" Türen für die umgekehrten Reisebusse. Da ich sie alle mit einem Schlüsselwort steuere, ist es praktisch und alle Türen für den gesamten Zug öffnen sich auf einmal. Gibt es eine einfache Möglichkeit, die Rückfahrtrainer verstehen zu lassen, dass sie umgekehrt sind? Muss ich diesen "Ausnahmen" ein anderes Schlüsselwort geben? Hier ist ein Screenshot des Zuges ...

DcwZTAP.jpg

... and here's the User code I used...

... und hier ist der Benutzercode, den ich verwendet habe ...

if not deferredCall then
layout:enumVehicles(
  function (vehicle)
    if vehicle.variables[ "Trai_Red" ] == keyword then
      vehicle.animations["Türen links"]:play(0, 1)
    end
  end
)
  defer(5, "Deferred execution")
elseif deferredCall == "Deferred execution" then
      layout:enumVehicles(
  function (vehicle)
    if vehicle.variables[ "Trai_Red" ] == keyword then
      vehicle.animations["Türen links"]:play(1, -1)
    end
  end
)
  defer(5, "Deferred execution (2)")
 elseif deferredCall == "Deferred execution (2)" then
    local v = $("Engi_Red")
if v:hasEngine() then
  v.engine.active = true
  v.targetSpeed = $("Events").variables["Engi_Spee"]
end

  defer(5, "Deferred execution (3)")
 elseif deferredCall == "Deferred execution (3)" then
 
end

Any other way of doing this..? In this layout there are two trains, and three stations, so I want to re-use the code where possible.

Whilst I'm here, could I make a couple of remarks..? The first is just me being a bit stupid. I spent a long couple of hours trying to get all the train to open it's doors; only one would work. As this is the first time, for me, using Keywords, I went over and over my code, looking for the error. I finally realised that five of that three of the coaches were the wrong way round on the track, so the doors had been opening and closing, but on the side I wasn't watching..! Lesson learned: check each piece for orientation..!
The other remark goes a bit deeper. I have had no problem using 'Pause' Actions in some projects, but this is the first time I've being using these same 'Pause' Actions through code. It ha taken me hours to sort out how it works; and it surprises me that it has to be done that way. I was expecting to have an action for, for example, 'Open Door', then an Action 'Pause 5s', then 'Close Door', Pause 5s, then ''Move Train'. Too simple..? Instead I have to use a load of 'If... elseif... end' statements. I found it very clumsy, and not very intuitive. Is there a better way..? Can one write an equivalent Function which sits beteween the Actions..? It seems so simple; what am I missing..?
I was also surprised by the code editor refusing my typed-in words, such as 'If', and only accepting the lower-case 'if'. I spent quite some time working out why the syntax was wrong. It's all part of the learning, though, so...

Thanks in advance for any helpful comments; my apologies for the length of post.

Irgendeine andere Art dies zu tun ..? In diesem Layout gibt es zwei Züge und drei Stationen, daher möchte ich den Code nach Möglichkeit wiederverwenden.

Könnte ich, während ich hier bin, ein paar Bemerkungen machen? Das erste ist nur, dass ich ein bisschen dumm bin. Ich verbrachte ein paar Stunden damit, den ganzen Zug dazu zu bringen, seine Türen zu öffnen. nur einer würde funktionieren. Da dies für mich das erste Mal ist, habe ich mithilfe von Schlüsselwörtern meinen Code immer wieder durchsucht und nach dem Fehler gesucht. Endlich wurde mir klar, dass fünf der drei Busse auf der Strecke falsch herum waren, also hatten sich die Türen geöffnet und geschlossen, aber auf der Seite habe ich nicht zugesehen ..! Lektion gelernt: Überprüfen Sie jedes Stück auf Orientierung ..!
Die andere Bemerkung geht etwas tiefer. Ich hatte in einigen Projekten kein Problem mit der Verwendung von "Pause" -Aktionen, aber dies ist das erste Mal, dass ich dieselben "Pause" -Aktionen über Code verwende. Ich habe Stunden gebraucht, um herauszufinden, wie es funktioniert. und es überrascht mich, dass es so gemacht werden muss. Ich hatte erwartet, eine Aktion zu haben, zum Beispiel für "Tür öffnen", dann eine Aktion "Pause 5s", dann "Tür schließen", Pause 5s, dann "Zug bewegen". Zu einfach..? Stattdessen muss ich eine Menge 'If ... elseif ... end'-Anweisungen verwenden. Ich fand es sehr ungeschickt und nicht sehr intuitiv. Gibt es einen besseren Weg ..? Kann man eine äquivalente Funktion schreiben, die zwischen den Aktionen liegt? Es scheint so klein; Was vermisse ich..?
Ich war auch überrascht, dass der Code-Editor meine eingegebenen Wörter wie "Wenn" ablehnte und nur das Kleinbuchstaben "Wenn" akzeptierte. Ich habe einige Zeit damit verbracht herauszufinden, warum die Syntax falsch war. Es ist jedoch alles Teil des Lernens, also ...

Vielen Dank im Voraus für hilfreiche Kommentare. Ich entschuldige mich für die Länge der Post.

Douglas

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo / Hello Douglas [english below],

das ist ein prinzipielles Problen für alle Fahrzeuge, die in einem Zugverband "vorwärts" und "rückwärts" eingereiht sein können. Dies gilt sowohl für das "Triebfahrzeug" (jenes Fahrzeug, das im Zugverband bei bestimmten Ereignissen mit dem Schlüsselwort "Fahrzeug" identifiziert wird) als auch für alle anderen Fahrzeige im Zugverband. Ich habe das Problem selbst noch nicht gelöst, habe aber dazu eine Idee, für die allerdings eine Voraussetzung erfüllt sein und ein paar Vorbereitungen von Hand durchgeführt werden müssen:

Voraussetzung
Für die Türanimationen aller zu betrachteten Fahrzeuge müssen einheitliche Bezeichnungen vorliegen, z.B. "Türen rechts" und "Türen links" für die bei "Vorwärtsfahrt" des Fahrzeugs auf dessen rechter oder linker Seite befindlichen Türen. Ist diese Voraussetzung nicht erfüllt, können die Türen der verschiedenen Fahrzeuge nicht durch einheitliche Befehle geöffnet und geschlossen werden.

Von Hand durchzuführende Vorbereitungen für jede zu betrachtende Zugzusammenstellung (Zugberband)
Hierfür sind mehrere vorbereitende Aktionen durchzuführen:

  1. Festlegen, welches Fahrzeug das "angetriebe" Fahrzeug, also das Triebfahrzeug  sein soll. Entweder ist dieses Triebfahrzeug eindeutig festgelegt, oder die nachfolgenden Aktionen sind für alle in Frage kommenden (möglichen) Triebfahrzeuge im Zugverband vorzunehmen. Bei einem fahrenden Zug ist immer genau ein Fahrzeug als Triebfahrzeug ausgezeichnet, nämlich jenes, dem eine Geschwindigkeit zugewiesen ist. Dies darf gleichzeitig immer nur ein Fahrzeug des Zugverbads sein. Bei Zugverbänden mit mehreren Fahrzeugen "mit Antrieb" (z.B. einem Wendezug mit Lok und Steuerwagen (mit Antrieb) oder einem Triebwagenzug mit Triebkopf an jedem Ende des Zuges), kann jedoch für verschiedene "Fahrten" die Rolle des Triebfahrzeugs zwischen den Fahrzeugen mit Antrieb gewechselt werden.
  2. Bestimmen, wo bei dem Triebfahrzeug "vorne" ist. Damit sind für den Zug in Fahrtrichtung "vorwärts" die Seiten "links" und "rechts" eindeutig bestimmt.
  3. Anlegen von zwei Objektvariablen für das Triebfahrzeug vom Typ "Liste", z.B. mit den Bezeichnungen "Fahrzeuge in gleicher Richtung" und "Fahrzeuge in Gegenrichtung", in welcher jeweils alle Fahrzeuge des Zugverbands, bei welchen es Türen zum Öffnen und Schließen gibt, in Abhängigkeit von ihrer Ausrichtung relativ zum Triebfahrzeug eingetragen werden.

AKtionen nach dem Anhalten des Zuges am Bahnsteig (Türen öffnen) oder vor dem Abfahren (Türen schließen)
Sind die obigen Voraussetzungen alle erfüllt und alle Vorbereitungen erledigt, lassen sich die Aktiionen für das Öffnen und Schließen der Türen im Zug wie folgt formulieren, wobei noch eine Objektvariable (z.B.) mit der Bezeichnung "Animation" verwendet wird, um die Seite des Zuges zu hinterlegen, auf welcher die Türen bedient werden sollen.

  1. Bestimmung der Türenseite beim Anhalten des Zuges am Bahnsteig:

    Fahrtrichtung des Triebfahrzeugs "vorwärts" ?
         Bahnsteig befindet sich in Fahrtrichtung rechts ?
              Animation = rechts
         sonst
              Animation = links
    sonst
         Bahnsteig befindet sich in Fahrtrichtung rechts ?
              Animation = links
         sonst
              Animation = rechts
     
  2. Öffnen der Türen nach dem Anhalten oder Schließen der Türen vor dessen Abfahrt

    Animation = rechts ?
         Schleife über alle Fahrzeuge der Liste "Fahrzeuge in gleicher Richtung":
              Animation "Türen rechts" in der zum Öffnen oder Schließen relevanten Richtung starten
         Schleife über alle Fahrzeuge der Liste "Fahrzeuge in Gegenrichtung":
              Animation "Türen links" in der zum Öffnen oder Schließen relevanten Richtung starten
    sonst
         Schleife über alle Fahrzeuge der Liste "Fahrzeuge in gleicher Richtung":
              Animation "Türen links" in der zum Öffnen oder Schließen relevanten Richtung starten
         Schleife über alle Fahrzeuge der Liste "Fahrzeuge in Gegenrichtung":
              Animation "Türen rechts" in der zum Öffnen oder Schließen relevanten Richtung starten

Dieser Mechanismus funktioniert für alle Züge gleichermaßen, für welche die oben genannte Voraussetzung bezüglich der Tür-Animationen erfüllt ist und die Listen-Variablen "Fahrzeuge in gleicher Richtung" und "Fahrzeuge in Gegenrichtung" als Objektvariablen des "Triebfahrzeugs" korrekt versorgt wurden.
 

This is a principle problem for all vehicles that can be "forward" and "backward" in a train formation. This applies both to the "traction unit" (the vehicle which is identified in the train formation with the keyword "vehicle" at certain events) and to all other vehicles in the train formation. I haven't solved the problem myself yet, but I have an idea for it. However, there is a prerequisite for this and some preparations have to be done by hand:

Requirement
For the door animations of all vehicles to be considered, uniform designations must be available, e.g. "doors right" and "doors left" for the doors located on the right or left side of the vehicle when the vehicle is "moving forward". If this requirement is not met, the doors of the different vehicles cannot be opened and closed by uniform commands.

Preparations to be carried out manually for each train composition to be considered (train composition)
Several preparatory actions must be carried out for this:

  1. Determine which vehicle should be the "driven" vehicle, i.e. the traction unit. Either this traction unit is clearly defined or the following actions have to be performed for all possible traction units in the train composition. In a moving train, exactly one vehicle is always designated as the traction unit, namely the one to which a speed is assigned. This may only be one vehicle of the train composition at a time. However, in train compositions with several vehicles "with drive" (e.g. a reversible train with locomotive and control trailer (with drive) or a railcar train with powercar at each end of the train), the role of the traction unit can be changed between the vehicles with drive for different "journeys".
  2. Determine where "in front" is on the traction unit. Thus, the sides "left" and "right" are clearly defined for the train in the direction of "forward" travel.
  3. Create two object variables for the traction unit of the type "list", e.g. with the designations "vehicles in same direction" and "vehicles in opposite direction", in which all vehicles of the train set with doors for opening and closing are entered depending on their orientation relative to the traction unit.

Actions after stopping the train on the platform (doors open) or before departure (doors close)
If all the above conditions are fulfilled and all preparations are done, the actions for opening and closing the doors in the train can be formulated as follows, whereby an object variable (e.g.) with the name "Animation" is used to define the side of the train on which the doors are to be operated

  1.     Determine the side of the doors when the train stops at the platform:

        Direction of the traction unit "forward" ?
             Platform is on the right side in the direction of travel ?
                  Animation = right
             otherwise
                  Animation = left
        otherwise
             Platform is on the right in the direction of travel ?
                  Animation = left
             otherwise
                  Animation = right

     
  2.     opening the doors after stopping or closing the doors before its departure

        Animation = right ?
             Loop over all vehicles in the list "Vehicles in same direction":
                  Start animation "Doors right" in the direction relevant for opening or closing
             Loop over all vehicles in the list "Vehicles in opposite direction":
                  Start animation "Doors left" in the direction relevant for opening or closing
        otherwise
             Loop over all vehicles in the list "Vehicles in same direction":
                  Start animation "Doors left" in the direction relevant for opening or closing
             Loop over all vehicles in the list "Vehicles in opposite direction":
                  Start animation "Doors right" in the direction relevant for opening or closing

This mechanism works the same way for all trains for which the above mentioned prerequisite regarding door animations is fulfilled and the list variables "Vehicles in same direction" and "Vehicles in opposite direction" have been correctly supplied as object variables of the "traction unit".


Viele Grüße / Many greetings
BahnLand

Link zu diesem Kommentar
Auf anderen Seiten teilen

Many thanks for the detailed reply, Bahnland. This confirms what I've suspected. I've a 'work-around' for my modest current needs (I can create a new Keyword and apply it to the reversed coaches...); the use of Lists will come later, as I become more familiar with the Lua concepts. I am quite used to the discipline of preparing beforehand, in general and more so in programming and coding; it's the surprises due to inexperience and innocence that create my present disturbances. These will, I hope and trust, diminish as I find out more, and will come about all the sooner thanks to the excellent participation of erudite Forum members such as yourself and others here.
There will be many more questions to come in the coming months, though (Yes, I'm slow..!)..! XHlPYfU.png

Vielen Dank für die ausführliche Antwort, Bahnland. Dies bestätigt, was ich vermutet habe. Ich habe ein "Workaround" für meine bescheidenen aktuellen Bedürfnisse (ich kann ein neues Schlüsselwort erstellen und es auf die umgekehrten Trainer anwenden ...); Die Verwendung von Listen wird später erfolgen, wenn ich mich mit den Lua-Konzepten vertraut mache. Ich bin es gewohnt, mich vorher vorzubereiten, im Allgemeinen und vor allem beim Programmieren und Codieren. Es sind die Überraschungen aufgrund von Unerfahrenheit und Unschuld, die meine gegenwärtigen Störungen verursachen. Ich hoffe und vertraue darauf, dass diese abnehmen, wenn ich mehr herausfinde, und dass sie dank der hervorragenden Teilnahme von Mitgliedern des gelehrten Forums wie Ihnen und anderen hier umso früher eintreten werden.
In den kommenden Monaten wird es jedoch noch viele weitere Fragen geben (Ja, ich bin langsam ..!) ..! 
XHlPYfU.png

Douglas

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich habe keine Ahnung von Programmierung mit Lua, geschweige denn von Programmierung im Allgemeinen.
Aber dieser Dummkopf dachte das;
Wenn der Zug immer die gleiche Zusammensetzung hat, können Sie die Züge nicht so umbenennen, dass ein bestimmter Name immer rechts und andere links geöffnet werden?

I have no idea about programming with lua, let alone programming in general.
But this fool thought this;
If the train always has the same composition, can you not rename the trains so that a certain name always opens on the right and others open on the left? (and vice versa)

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

1 hour ago, hubert.visschedijk said:

...But that fool thought so...

'Great minds think alike' goes the proverb. That ^^ is just about what I did; giving a new, different Keyword to the reversed coaches. Another line or two of code to command the correct doors for those coaches and the deed is done..! There could be more sophisticated methods for more sophisticated needs, but the layout I'm playing with now works as required, so I'm happy. Thanks for the solution; it's the right one for the circumstance, so well done. rWNVV2D.gif

"Große Köpfe denken gleich" lautet das Sprichwort. Das ist genau das, was ich getan habe; Geben Sie den umgekehrten Trainern ein neues, anderes Schlüsselwort. Ein oder zwei weitere Codezeilen, um die richtigen Türen für diese Reisebusse und die Tat zu befehlen, sind fertig ..! Es könnte ausgefeiltere Methoden für anspruchsvollere Anforderungen geben, aber das Layout, mit dem ich spiele, funktioniert jetzt wie erforderlich, also bin ich glücklich. Danke für die Lösung; es ist das richtige für den Umstand, so gut gemacht. rWNVV2D.gif

Douglas

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...