Jump to content

Goetz

Mitglieder
  • Gesamte Inhalte

    6161
  • Benutzer seit

  • Letzter Besuch

Alle erstellten Inhalte von Goetz

  1. What's the error message in this particular case, hmclay? It may hold that clue you're looking for. Without knowing what error you get when checking if the variable exists, it's difficult to guess what's going wrong.
  2. Hallo wkh, für mich wird vor allem deutlich, dass es nicht ratsam ist zwei Methoden zu vermischen. Alles, was du mit deinen Anhängseln an den Namen der Kontakte erzielst, kannst du ebenso gut mit Objektvariablen in diesen Kontakten erreichen. Die hätten dann - im Gegensatz zu deinen Anhängseln - aussagekräftige Namen. Das alleine würde die Lesbarkeit deiner experimentellen Anlage schon merklich verbessern. Diese Anhängsel lösen keins deiner Probleme, verursachen aber unnötige Komplikationen. Nimm zum Beispiel die Parkzeit: Wenn der Kontakt eine Variable Parkzeit enthielte, dann könnte in dieser Variablen der Wert als Zahl stehen. Damit sparst du dir schon die zweifache Umwandlung. Du prüfst, ob die Variable vorhanden ist und verwendest dann den Wert aus der Variablen für die Verzögerung. Fertig. if contact.Parkzeit ~= nil then -- Fahrzeug wird geparkt, Richtungswechsel - Vehicle will be parked, drive direction change vehicle.engine.active = false vehicle.drivingDirection = -vehicle.drivingDirection vehicle.target = GetNewDestination(vehicle) -- Weiterfahrt nach Wartezeit - Route to be continued after waiting time $("ParkingSlotExit"):invoke(contact.Parkzeit, vehicle) return end Anstelle des Kontakts übergibst du gleich den Wert der Variablen an das Ereignis ParkingSlotExit (und benennst den Parameter entsprechend): if not deferredCall then defer(Parkzeit, "Delay") elseif deferredCall == "Delay" then -- ... end Schon ist alles viel schlanker und lesbarer. Wenn du eh schon Objektvariablen einsetzt, dann bleibst du meines Erachtens besser konsequent dabei. Viele Grüße Götz
  3. Hallo wkh, dennoch ist es bei dir immer nur ein Buchstabe an der siebten Stelle im Namen. Der könnte ebenso gut in einer Objektvariablen stehen. Wie du diese Information dann an unterschiedlichen Stellen im Programm auswertest, ist davon ganz unabhängig. Ganz allgemein haben alle Objekte im MBS eine Liste an Eigenschaften. Mit Objektvariablen kannst du diese Liste nach deinen Wünschen erweitern. Deshalb sind die das richtige Mittel für solche Unterscheidungen. Namen sind unzuverlässig und das Zerlegen des Namens ist unnötig umständlich. Du kannst übrigens in jedem Objekt eine beliebige Anzahl an Variablen haben. Und sie können Informationen ganz unterschiedlicher Art bereithalten: Zahlen, Strings, Objekte, Zeiten, Listen, Tabellen, Fahrstraßen, Ereignisse ... Jedes Objekt, also Fahrzeuge ebenso wie Kontakte, Signale, Gleisstücke usw., kann Objektvariablen speichern. So kannst du Informationen immer dort hinterlegen, wo sie logisch hingehören. Viele Grüße Götz
  4. Hallo wkh, wenn du dafür die Schaltfläche in der Kopfleiste deiner Antwort benutzt, ist der Code dank Syntax Highlighting im Posting besser lesbar: if string.sub(contact.name, 7, 7) == "I" then if HasVehicleRoute(vehicle, contact) == false then return end end print("Weiter") -- Zielkontakt - Destination contact? if vehicle.variables["Contact"] ~= contact then return end -- Dieser Kontakt ist der Zielkontakt - This contact is the target -- Fahrtunterbrechung ohne Richtungswechsel - Driving break without direction change if string.sub(contact.name, 7, 7) == "B" then vehicle.engine.active = false -- Weiterfahrt nach Wartezeit - Route to be continued after waiting time $("BreakEnd"):invoke(contact, vehicle) return end Und wenn du deine Kontakte unterscheiden willst, empfehle ich dir eine Objektvariable anstelle des siebten Zeichens im Namen. Die Variable nennst du immer gleich - z.B: Typ - und darin hinterlegst du einen Buchstaben oder eine Zahl. Eine Zahl hätte dann noch den Vorteil, dass du die als Index verwenden kannst, um direkt aus einer Liste die zugehörige Funktion zu holen. Das ist besser als mit einer Reihe von Vergleichen alle eventuellen Möglichkeiten abzuklappern. Falls du lieber bei deiner Variante mit dem Namenszusatz bleiben willst, lies ihn einmal aus und lege ihn in einer lokalen Variablen ab. Denn du brauchst dieses siebte Zeichen ja mehrfach. Nämlich für jeden der Vergleiche. Da lohnt es sich, wenn du den Namen nicht immer wieder neu auslesen und zerlegen musst, sondern auf die lokale Variable direkt (= im Prozessor-nahen Cache) zugreifen kannst. Viele Grüße Götz
  5. Goetz

    Ronis Projekte

    Die werden vom Hersteller auch nicht mit Stroh ausgeliefert. Aber neben den Katalogbilder gibt es auch eine Vielzahl von Lehrvideos auf YouTube. Da sieht man dann den typischen Gebrauch.
  6. Goetz

    Ronis Projekte

    Aber nicht beim Pferdeanhänger. Da sind die Achsen tatsächlich meist so weit hinten. Aus gewichtigen Gründen, sozusagen ... 105908.jpg (1499×1080) Viele Grüße Götz
  7. Genau das funktioniert leider nicht und das wollte ich dir mit meiner Erläuterung zum $-Zeichen verdeutlichen. In der Klammer steht nichts, was du zum Adressieren des Objekts verwenden kannst. In der Klammer steht nur eine Rückmeldung vom Studio. Deshalb eignet sich die $-Schreibweise nicht zur dynamischen Adressierung von Objekten.
  8. Hallo wkh, kennst du mein Video zu diesem Thema? Den Link dazu findet du in meiner Signatur. Die Anlage zum Video hat die Content-ID 20F2B5B8-FAC2-403A-A063-DC084515941A Selbst, wenn es noch weit von dem entfernt ist, was dir an generischer Prozedur vorschwebt, könnte das eventuell als Diskussionsgrundlage dienen? Und wenn du die EV in Lua umwandelst, siehst du schon eine ganze Reihe nützlicher Schreibweisen. Die Schreibweise mit dem vorangestellten $-Zeichen ist eine Besonderheit im Studio. Dahinter verbirgt sich eine Objekt-ID. Der Name in den Klammern soll dir nur zeigen, um welches Objekt es sich handelt. Du kannst das Objekt sogar umbenennen und wirst dann im Skript entsprechend den neuen Namen wiederfinden. Das heißt aber im Gegenzug, dass Objekte bei dieser Schreibweise nicht mit ihrem Namen angesprochen werden. Viele Grüße Götz
  9. Geh es doch logisch an, Walter: Das entscheidende an einem Kontaktpunkt ist der Punkt in der Mitte. Das Drumherum ist nur da, weil man einen Punkt alleine nicht sehen und nicht anfassen kann. Also gehört der Punkt in der Mitte des _CP Objekts auf die Kante des Modells, wenn zwei Modelle mit ihren Kanten aneinander andocken sollen. Damit kannst du Möglichkeit 2 ausschließen. Bleibt die Frage der Ausrichtung. Um die herauszufinden, kannst du den Kontaktpunkt aus dem Katalog nehmen und an ein geeignetes Katalog-Modell andocken. Dann siehst du, wie die Ausrichtung bisher gehandhabt wird. Und diesen defacto Standard kannst du für dein Modell übernehmen. Ich hoffe, dass dir diese Erklärung ein wenig weiterhilft Götz
  10. Ja, das war unangebracht. Und was die Position der Hebelbänke in Stellwerken angeht, hat mich meine Erinnerung getäuscht. Tut mir leid! Götz
  11. Hallo Thomas, setz ein Leerzeichen vor FB, zwei Leerzeichen vor TB und noch einmal ein Leerzeichen vor die Zahlen, dann passt es.
  12. Oh, dann muss ich mich entschuldigen. Solche Hebel kannte ich bisher nicht.
  13. Hallo @rainer.kreuzer, das wäre völlig unrealistisch. Solch ein Signal (zweiflügelig, ungekoppelt) wurde mit zwei Hebeln bedient, je einer für die beiden Flügel. Dein Diorama zeigt zwar, dass du wenig Wert auf Realismus legst. Du verstellst die Fenster mit Hebelbänken, die eigentlich in die Raummitte gehören. Du stellst ein riesiges Reiterstellwerk dorthin, wo keine einzige Weiche zu sehen ist und nur ein einzelnes Flügelsignal. Dafür bekommt der Streckenabschnitt, den jeder Lokführer auch bei schlechtesten Sichtverhältnissen sicher befahren könnte (weil es eh nur geradeaus geht) eine teure Festbeleuchtung ... das ist alles hübsch, aber ziemlicher Mumpitz. Das ist natürlich alles deine Sache und du kannst deiner Fantasie da freien Lauf lassen. Ich bezweifle nur, dass ein Modellbauer, der im Gegensatz zu dir Realismus schätzt, solchen Blödsinn bauen wird. Diese Hebel kennen nur zwei Stellungen. Weil damit ein Seilzug bedient wird. Da gibt es keine halben Sachen. Viele Grüße Götz
  14. Aber nur, wenn die Spur ein kontinuierlicher Kreis ist. Dort, wo eine Gerade in eine Kurve übergeht, wird das so nicht der Fall sein (falls der Anhänger nur ein Wheelset hat) Klasse, Axel! Dein Konstrukt funktioniert hervorragend
  15. Meines Wissens heißen die Ankerpunkte für Fahrspuren "Wheelset". Die sitzen wie Stifte in einer Rille in der Mitte der Fahrspur. Und man kann davon pro Fahrzeug maximal zwei haben, weil maximal zwei Stifte bei jeder Krümmung der Fahrspur immer in der Rille bleiben können. Optional können diese Wheelsets auch in Richtung der (Tangente zur) Fahrspur gedreht werden, um Drehgestelle oder Räder in Kurven auszurichten. Für die starren Radachsen und die starre Deichsel von Axels Wohnwagen oder Chris' Anhänger ist diese Option unpassend.
  16. Wenn man beim Anhänger das vordere Wheelset genau unter den Ring an der Deichsel setzt und beim Fahrzeug das hintere Wheelset genau unter die Kupplung, dann bleiben diese beiden Punkte bei Kurvenfahrten in der Mitte der Fahrspur und somit auch zusammen. Das sagt mir zumindest mein allgemeines Geometrieverständnis, ohne reale Erfahrungen im Modellbau.
  17. Und das scheint mir sehr glaubwürdig zu sein.
  18. Ich bin aber auch begeistert, was für ein Gespür du für diese Kleinigkeiten hast. Das sieht alles sinnvoll und stimmig aus. (Bis auf die Weichenlaterne - da stimme ich Roter Brummer zu, dass die an der Stelle unpassend wirkt.)
  19. And the answer is still the same: The 3D-Train Studio isn't the right software for you!
  20. Save yourself the expense, Leslie. The 3D-Train studio isn't the right software for you.
  21. Demanding and stingy - why am I not surprised?
  22. ist das, was man wieder vergisst. "Nun habe ich es durchschaut und versteh den Mechanismus dahinter" ist das, was hängen bleibt, Thomas.
  23. Und deshalb sage ich immer wieder: Beim Abschreiben lernt man nichts. Es entsteht kein Verständnis. Es gibt keine Erkenntnisse. Und deshalb gerät es auch sofort wieder in Vergessenheit.
  24. Ich hatte es geahnt, Thomas. In deiner Variablen steht ein Schlagwort. Ein Schlagwort kann aber nicht auf einem Kontakt stehen. Das können nur Fahrzeuge. Deine Prüfung ist falsch. Du brauchst die Bedingung Variable existiert und nicht Fahrzeug steht auf einem Kontakt P.S.:Und @alexander42 hat ebenfalls recht: Wenn du mal so, mal so schalten willst, gehört der eine Befehl über die Trennlinie in der Bedingung und der andere darunter. Viele Grüße Götz
  25. Hallo Thomas, Weichen sind kein gutes Mittel, um Straßenfahrzeuge zu lenken. Deshalb haben die Kreuzungen und Einmündungen im Katalog auch keine Weichen mehr. Es ist klüger, dem Bus einen Kontakt an der Haltestelle als Fahrziel zuzuweisen. Zu deiner EV: Das Ereignis wird ausgelöst, wenn ein Fahrzeug den Kontakt GK Kreuzung 01-1 betritt. Warum willst du dann noch prüfen, ob das auslösende Fahrzeug auf dem Kontakt steht? Und was steht in seiner Variablen "Bus 01 V"? Ist das etwas, das auf einem Kontakt stehen kann? Denn genau genommen prüfst du ja, ob das Ding aus dieser variablen auf dem Kontakt steht. Außerdem wird die Prüfung zum Abbruch der EV führen, wenn ein anderes Fahrzeug den Kontakt betrifft, in dem diese Variable gar nicht vorhanden ist. Öffne mal bitte das Ereignisprotokoll. Da solltest du dann eine entsprechende Fehlermeldung sehen, dass jemand versucht hat auf eine Variable zuzugreifen, die nicht existiert. Viele Grüße Götz
×
×
  • Neu erstellen...