Jump to content

Goetz

Members
  • Content Count

    938
  • Joined

  • Last visited

1 Follower

About Goetz

  • Birthday 01/07/1956

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. Goetz

    Gleis duplizieren

    Ein Programm verhält sich nur dann verschieden, wenn es (irgendeinen) Unterschied gibt. Sonst nicht. Es hat kein Eigenleben ... "Ich sehe keinen Unterschied" oder "Ich finde keinen Unterschied" ist die bessere Einstellung. Weil du so nicht den Blick für Unterschiede verschließt. Wenn du steif behauptest es gäbe keinen, dann wirst du ihn (und somit die Ursache) auch nur schwer entdecken können.
  2. Goetz

    LUA Tabelle Remove

    Versuch doch mal bitte, dem Tabellenplatz zuerst einen anderen Wert zuzuweisen, bevor du ihn löscht. $("Abzweigung").variables["Wartender_Obj"] = 1 -- erst Objekt ersetzen table.remove($("Abzweigung").variables["Wartender_Obj"],1) -- dann löschen
  3. Goetz

    Gleis duplizieren

    ist immer ein Hinweis darauf, dass die Umstände nicht identisch sind. Da wir dir nicht zuschauen, können wir nur schwer einschätzen, worin genau der Unterschied bestehen mag. Wenn ich bei einem vermeintlichen Klick aufs Gleis die Maus ein wenig ziehe, dann wird das neue Stück angehängt. Lasse ich die Maus still liegen, dann erzeugt der Klick die Kopie an Ort und Stelle. Aber ich kann nicht sagen, ob du vielleicht auf die gleiche Weise mal dieses, mal jenes Verhalten erzeugst.
  4. Goetz

    LUA Tabelle Remove

    Das liegt nicht an Lua. Deine Objekttabelle steht im MBS. Dort gelten andere Regeln (weil das MBS nicht in Lua programmiert ist.) Probiere mal bitte, ob du den Tabellenplatz mit table.remove löschen kannst, wenn du ihm zuvor etwas anderes als ein Objekt zuweist.
  5. Musst du nicht. Ich lege die dauerhaft entweder auf dem Twitch Kanal ab oder auf meinem YouTube Kanal. Und die Links zu beiden Orten hast du ja jetzt. Weil es noch nicht 11 Uhr war, ich den Stream aber schon gestartet hatte, fahren am Anfang alle Züge ein paar Runden, bevor es los geht. Und da hatte ich das Mikro noch ausgeschaltet.
  6. Die müssen von jemandem anderen sein. Zum Video EV Baiscs aus dem ersten Posting in diesem Thread gibt es bislang von mir noch keine Fortsetzung. Aber in den beiden Sendungen von gestern und heute lernst du (unter anderem) Schlagwörter, Listen und Tabellen kennen.
  7. Die Sendungen von gestern und heute findest du mit diesem Link: Falls du aber die Anlage meinst, die ich für das Video im ersten Posting oben gebaut hatte: Die gibt es nicht fertig. Aber du kannst sie sehr leicht selbst bauen. Denn sie besteht nur aus Modulen der Minimax-Serie. Diese Module findest du in deinem Modellbahnstudio unter der Kategorie "Landschaftselemente"
  8. Wie versprochen habe ich in der heutigen (2-stündigen) Sendung den Zügen "beigebracht", am Einfahrsignal zu stoppen. Außerdem habe ich den Ring mit Blocksignalen in drei Abschnitte unterteilt. Sie arbeiten nach dem "Selbstblock" Prinzip. Hier ist die Anlage, die im Laufe der Sendung entstanden ist: Schattenbahnhof 02 (WIP).mbp
  9. Vielen Dank für dein Feedback, Martin. Das Einfahrsignal wird im aktuellen Stand der Anlage noch ignoriert - stimmt. Soweit bin ich noch nicht. Ich will versuchen, heute (Sonntag) ab ca. 11 Uhr mit der Anlage weiterzumachen. Dazu gehört dann sicher auch, dass eintreffende Züge das Einfahrsignal beachten. Hier ist der Stand der Anlage, den ich in der gestrigen Sendung erreicht hatte: Schattenbahnhof 01 (WIP).mbp
  10. Ich zeige heute auf meinem Twitch-Kanal wieder Basics zur Ereignisverwaltung in V5. Beginn der Sendung ist vermutlich um 10:30 Uhr. Als Beispielanlage verwende ich den kleinen Schattenbahnhof von @ger klunder. Denn damit lässt sich vieles sehr schön zeigen. Ich hatte es am Mittwoch und Freitag schon einmal auf Englisch versucht. Aber ich war mit dem Ergebnis unzufrieden. Deshalb fange ich heute noch einmal von vorne an und erkläre diesmal alles auf Deutsch. Ich freue mich, wenn jemand Zeit und Lust hat live dabei zu sein. Die Sendung ist aber auch später noch ein paar Tage auf Twitch abrufbar. Viele Grüße Götz
  11. Goetz

    Parallele Arbeit

    @streit_ross Das ist keineswegs eine "unnütze Spielerei". Im Gegenteil ist das gemeinsame und gleichzeitige Agieren in derselben "Welt" der Kern dessen, was andere Spiele sehr populär macht. Bei der realen Modellbahn ist es genauso reizvoll, mit anderen gemeinsam an derselben Platte zu arbeiten. Die Popularität von Minecraft beruht ebenfalls (unter anderem) auf der Möglichkeit, gemeinsam zu bauen. Genau diese Möglichkeit war der Grund, warum unser 9-jähriges Enkelkind nicht genug davon bekommen konnte, mit mir Minecraft zu spielen. Die Umsetzung einer Multiplayer Version ist nicht so einfach, wie es auf den ersten Blick scheinen mag. Aber es wäre ein Feature, welches die Popularität vom MBS enorm steigern würde.
  12. Goetz

    Schnittstelle und Lua

    Nein - vollkommen richtig. Ich hatte das nur übersehen. Pardon. Ich hatte die Funktionsdefinition SendCom() überflogen und dort kein local gesehen. Da du die Variablen in der Funktion neu befüllst, kannst du sie übrigens bedenkenlos beim Verlassen der Funktion löschen. Also innerhalb der Funktion local anlegen. Das hat - soweit mein bisheriges Verständnis dieser Materie - zwei Vorteile. Du kannst den selben Namen für weitere lokale Variablen an anderen Orten nutzen, ohne Konflikte befürchten zu müssen. Lokaler Speicher ist schnell, aber auch wertvoll. Deshalb ist es gut, den nur für den Moment zu beanspruchen, in dem man eine Variable wirklich braucht. Wenn sie beim nächsten Funktionsaufruf einen neuen Wert bekommt und der letzte Wert bedeutungslos ist, dann kann man die Variable ebenso gut in dem Moment frisch anlegen, in dem sie eingesetzt wird. Oftmals sind die Variablen ja nur Zwischenträger, um Daten von A nach B zu bringen. Ich glaube, dass es generell eine gute Praxis ist, die Lebensdauer von Variablen kurz zu halten. Wenn der aktuelle Wert nicht mehr benötigt wird - weder direkt noch indirekt (für Additionen etc.), dann ist die Variable passé. Dass ich später unter dem selben Namen wieder einen Wert bilde, macht keinen Unterschied. Ich muss nicht permanent ein Plätzchen frei halten. Ich könnte mir auch vorstellen, die Tabelle ComAnswer() ebenfalls lokal in der Funktion SendCom() zu erzeugen und mit return an den Aufrufer zu übergeben. Das wäre meines Erachtens sauberer, weil diese Tabelle ebenfalls bei jedem Funktionsaufruf neu gebildet werden muss. Und das ist mit einer lokalen Tabelle innerhalb der Funktion automatisch gewährleistet. Der Empfänger ist dann eine neue lokale Adresse beim Aufrufer. Dort wird die Tabelle für die print-Ausgabe verwendet und anschließend der Müllabholung überlassen. Zu print() habe ich auch noch einen Vorschlag. Die Funktion print() ist eine echte Bremse. Sie kostet viel Rechenzeit. Deshalb ist es ratsam, zuerst den gesamten Ausgabetext in einem einzigen String zusammenzufassen und diesen dann mit einem einzigen print() auszugeben. Lua hat dafür etwas sehr nettes: table.concat() Beispiel = {"Lua", "und", "die", "weite", "Welt"} s = table.concat(Beispiel, " ") print(s) Das zweite Argument für table.concat ist das einzusetzende Trennzeichen. Im obigen Beispiel ist es ein Leerzeichen. Die "alles in einen String" Methode ist aber auch ratsam, wenn du z.B. in einer Schleife wiederholt print() verwendest. Bau mit der Schleife lieber den String zusammen und gib ihn dann einmal komplett aus. Weil ich oft missverstanden wurde: All das meine ich in keiner Weise als Kritik. Was du programmiert hast, ist alles prima. Ich will nur gerne beitragen, was ich entdeckt habe und nützlich finde. Viele Grüße Götz
  13. Goetz

    Schnittstelle und Lua

    Spontan habe ich nur zwei Kleinigkeiten: statt if ok == nil then kannst du auch schreiben if not ok then, denn nil wird in Lua als false gewertet. Variablen sind in Lua per se global angelegt. Lokale Variablen muss man explizit erzeugen. Deshalb wäre es besser, du würdest local ok, status = tcp:connect(host, port) schreiben. Das Schlüsselwort local deklariert alle dahinter aufgezählten Variablen als lokal Funktionsargumente, Iteratoren etc. sind natürlich auch in Lua per se lokal definiert.
  14. Ich kann es nicht sicher sagen, aber ich fürchte, an diese Werte kommst du erst in der V5 per Ereignisverwaltung dran. In V4 müsste man - wenn es ginge - eine Variable im Auslöser $_trigger1 (dem auslösenden Fahrzeug) ändern. Ich habe verschiedene Varianten wie z.B. $_trigger1.delereration ausprobiert, leider ohne Erfolg. Alle haben nur neue Variablen mit dem angegebenen Namen im auslösenden Fahrzeug angelegt, aber nicht die Eigenschaft des Fahrzeugs geändert. Wenn du an solchen Feinheiten wie der Verzögerung per EV Einfluss nehmen willst, dann tust du dir mit der V5 aber sowieso einen Riesengefallen. Die ganze EV ist dort viel einfacher zu handhaben.
  15. Goetz

    Automatic to free track

    I wonder why you ran into the same problems. The system works fine here. https://youtu.be/bTizS_WmenU As is, the system has two flaws. it allows trains to enter a fully occupied station. it may change a switch underneath an incoming train, if the timing of an outgoing train is unfortunate. There are better ways to handle the track finding. But I wanted to show you that your concept idea wasn't wrong. It was only incomplete.
×