Beiträge: 173 Ort: Berlin Eingetreten: 25.07.12 Status: Offline
Eingetragen am 29.06.2024 02:46
Ich habe seit Jahren einen Fahrplan der aus Pool‘s besteht, so kann zumindest ein bisschen Kontrolle über die Häufigkeit der gezeigten Fahrplanzeilen haben.
Jetzt meine Frage: Wie kann man $GROUP`s in einen solchen Fahrplan integrieren. Da ich Anfänger in Sachen Szenen, Sektionen und Co. bin, brauche eine Antwort, die ich auch verstehe. Oder geht das überhaupt nicht.
Gruß UlrichBearbeitet von Ulrich am 23.07.2024 14:12
Ein Traffci Fahrplan besteht in erste Linie aus Zeilen, die Bewegungen oder Segmentierung angeben. (Andere Befehle gibt es schon haufenweise, z.B. Defaultwerte, Makrodefinitionen, aber das Hauptgerüst ist doch die Segmentierungsbefehlen und Bewegungszeilen). Wenn das Ablauf startet, hat Traffic einen leeren Bildschirm-Fläche, und versucht solange darin Bewegungen/Segmentirungsbefehlen durchzuführen, bis da noch genug Platz vorhanden ist.
Eine Bewegungszeile gibt seine vertikale Platzbedarf mit den Parametern IMGY, ABOVE, BELOW and.
Gibt es noch genug Platz, wird zufällig zu der Zeile Platz zugewiesen, und dort wird die Zeile laufen.
Segmentierungsbefehle - $SECTION, $GROUP, $SCENE - von Aussen gesehen verhalten sich, wie Bewegungszeilen. Jeder hat seine eigene Methode sein Platzbedarf zu definieren ( z.B. für $SECTION eine DY= Parameter ). In der Inneren passiert dann die wesentliche
- eine $SECTION spielt genau die selbe Spiel, wie das Gesamtbilschirm für das ganze Fahrplan, also weist Teile seiner Fläche solange den enthaltene Bewegungszeilen / weitere Segmentierungsbefehlen zu, bis es genug Platz gibt. (Falls eine innere Zeile mehr Platz benötigt, als insgesamt zur Verfügung steht, dann es wird übersprungen, nicht durchgeführ, sonst wird solange gewartet, bis einige Zeilen fertig sind, und genügend Platz für die neue Zeile da ist. Das ganze Mechanismus ist ein schritt komplizierter, weil eine einfache Bewegungszeile, ein $GROUP und auch eine $SCENE haben einen 'gewünschten / maximalen', und einen 'geforderten / minimalen' Platzbedarf. Bei Bewegungszeilen / $GROUP kann aus der Bereichen $ABOVE, $BELOW abgeschnitten werden, aus der Fahrweg $IMGY nicht, bei $SCENE sind so alle $PATH - Fahrwege Tabu, aber oberhalb der obersten, unt unterhalb des untersten Fahrsegs kann auch abgeschnitten werden )
- ein $GROUP verhält sich abhängig davon, ob sie Hintergrund / Vordergrund oder Fahrweg-Definitionen enthält. Gibt es mindestens eine solche Parameter,
Hintergrund und Vordergung-Grafik wird erstellt, und die enthaltene Bewegungszeilen laufen nacheinander in diese schon gezeichnete Umgebung. Gibt es aber keine Angabe zur Fahrweg oder Hintergrund / Vordergrund innerhalb des $GROUP - Befehls, der $GROUP stellt nur die Bildschirm-Platz zur Verfügung,
aber genau den selben Bereich für alle enthaltene Bewegungszeilen.
- eine $SCENE ist ähnlich zu der $GROUP mit Hintergrundangabe, die Umgebung ist gezeichnet, die Bewegungszeilen in jeder enthaltenen $PATH - Block laufen in der schon gezeichneten Umgebung.
$POOL-s ( $SPOOL, $IPOOL auch ) sind dagegen nur Speicher Für Parametersätze (nich ein mal für Befehle).
Sie liegen ausserhalb der üblichen Ablaufsteuerung, also ausserhalb von $SECTION / $GROUP / $SCENE und die Bewegungszeilen auf der oberste Ebene.
Innerhalb der Bewegungszeilen und innerhalb der Segmentierungsbefehlen sorgt eine POOL=<PoolName>; Parameter dafür, das ein Parametersatz aus den Pool geholt wird, und in die schon vorhandene Parametersatz eingearbeitet wird.
Falls als Bewegungszeile eine kurze zeile bestehend aus einem einzigen Parameter, POOL=<PoolName>; ist, dann holt Traffic alle wirksame Parametern aus der Pool-Zeile. Maistens ist es so, aber muss es nicht unbedingt so sein. Man kann sogar aus mehreren Pools Parametern holen lassen und zusammenfügen lassen, dann werden schon die Parameterangaben PARAM-=VALUE; PARAM+=VALUE; PARAM#=VALUE; PARAM<=VALUE; PARAM>=VALUE; PARAM/=VALUE; ihren sinn bekommen - zusammen mit den Parametern AP= ; , AP2= ; ENV= ; kann man am ende einen Parametersatz, sogar einzelne Parameter (wie der Hintergrunddefinition mit vielen Gebäuden, Bäumen) zusammenbauen lassen aus unterschidliche Quellen.
Also: was bestimmt nicht geht, $SECTION / $GROUP / $SCENE innerhalb der Pools zu haben. Pools sind nur Behälter für Parametersätze, nicht für Segmentierungsbefehlen.
Mann kann aber sehr wohl eine "Ablaufsteuerung" mit $SECTION / $GROUP Befehlen bauen, und die darin verwendete Bewegungen aus POOL-s zu holen.
So arbeitet der große Fahrplan, der mit Traffic mitgeliefert wird. Zugegeben, es kann erschreckend sein eine Fahrpolan, der aus mehr, als 100 Dateien besteht durchzusuchen, aber man braucht nur wenige Dateien anzuschauen.
Die meißte Pools darin haben die Aufgabe, eine Zugmenge ( und Bewegunsmenge ) zu definieren, aus der man bei den unterschiedlichen Blöcken eventuell Untermengen holen kann. Wie definieren Pools für unterschiedliche Länder, aber nutzen die Flags um nach Epochen oder Bewegunsarten (einfachen Durchfahrt, oder etwas komplizierteres, dass nur im Bahnhof sinnhat), oder auswahl zwischen Dampf, Diesel und Elektrischen Antrib.
Die Hauptfrage lautet: Wedelt der Hund mit dem Schwanz oder wedelt der Schwanz mit dem Hund? Wáhlt man einen Umgebung, einen Hintergrund aus, und sucht dazu die passende Züge, oder wählt man die Züge aus, und versucht dazu die passende Hintergünde zu verwenden. Die POOLs sind um diese Frage herum entstanden. Die einfache Lösung wäre in jede Szene, jede Hintergrund die wenige, passende Züge reinzuschreiben. Aber daas ist eine aussichtslose Aufgabe, wenn sowohl die Fahzeugzeichnungen als auch die Hintergrund-fotos und Nitergrundelemente sich ständig vermehren
POOLs hatten nicht nur mit ihren Flags die erweiterte Auswahlmöglichkeit, sondern sorgten auch dafür, dass eine Sammlung von Bewegungen zur Verfügung stehen konnte, aus der man in mehreren unterschiedlichen Plätzen innerhalb der Fahrplandateien gebrauch machen könnte.
Wegen WTraffic sind aber die $DSECTION/$CSECTION, $DGROUP/$CGROUP entstanden, die etwas ähnliches anbieten (ohne den detaillierten Auswahl mit Flags).
Diese relativ neue Segmentierungsbefehlen sind $DEFINESECTION und $CALLSECTION usw. Jeder Sektion kann eine Name bekommen, und unabhängig davon,
ob es mit normale $SECTION oder mit $DSECTION definirt wurde, kann man mit $CSECTION mit Angabe dessen Name aufrufen. Also, den selben Satz von Bewegungen für unterschiedliche Zwecke zu benutzen geht auch mit benannte Sektionen, nicht mit Pools.
(bei WTraffic muss das gesamte Fahrplan eingelesen und im Server zur Verfügung stehen, wenn Leute daraus nur Teile laufen lassen möchten, braucht man dazu eine andere Mechanismus, als es beim Traffic war, wo man einen anderen Fahrplandatei gestartet hat, oder mit Optionen schon beim Einlesen der Fahrplandeteien die Selektion gemacht hat).
Ich hoffe, es war verständlich - falls nicht, ihr sollt ruhig nachfragen. Und diese Forum ist auch der richtige Platz über Ideen, Wünsche zu reden, dass man in Traffic-Fahrplänen lösen möchte. Es kann sein, das schon jetzt in nicht ganz veröffentlichten Funktionen die Lösung da schlummert, und es kann auch sein, das ich mit einen reativ einfache Erweiterung etwas lösen kann, das andere gerne hätten.
Ich glaube dass ich von Anfang an Verstanden habe, wieso das so ist.
Es sind im Grundsatz zwei verschiedene Arten den Bildschirm auf zu teilen.
1. Zum Einen Zeile für Zeile, wo gerade Platz ist.
2. Zum Anderen wird der Ganze Bildschirm reserviert, weil die Zeilen z.B auch
übereinanderliegen können.
Meine Frage bezog sich also darauf wie die zwei verschieden Arten verbunden werden Können, oder ob das überhaupt geht.
Gruß UlrichBearbeitet von Ulrich am 23.07.2024 14:15
auf den ersten Blick sehe ich nichts verdächtiges, es sollte funktionieren.
Pools haben mit dem Problem nichts zu tun, die liefern nur die Parametern.
Was sich hier abspeilt, passiert zwischen die Bewegungszeile, der den POOL=<Auswahl> ;
Parameter hat, und die $SCENE / $ENDSCENE .
Eine einzige Zeile - sowohl eine einfache, wie C=<Fahrzeug>; , aber auch eine POOL=<PoolName>; , dahinter mehrere unterschiedliche Bewegungen sich verbergen können,
können in der selben Zeit mehfach auf dem Bildschirm sein. Also, eine
POOL= xxx ;
$SCENE
...
$ENDSCENE
Konstrukt ist völlig legal, und sollte
- erst eine Bewegung aus einem Pool holen.
- danach ist die Frage, ob die Szene auf die gebliebene Fläche reinpasst. Man muss in betracht ziehen, dass die erste Zeile zufällig auf den Bildschirm kommt - eventuall in die Mitte - , also können mehrere, aber kleinere Bereiche frei bleiben.
Falls die Szene auf den Fenster reinpasst, nur neben die Bewegungszeile nicht mehr genug Platz ist, dann wartet ab, bis die Bewegungszeile zu Ende geht, und dann soll die Szene starten.
Hast Du schon mal nachgeschaut, was steht in der Fehlerdatei ?
In Konfigurationsfenster gibt es die Möglichkeit die Fehlerdatei zu öffnen, dann sieht man,
was passiert ist. Vielleicht geht etwas ganz anderes schief.
Andere Frage: falls Du nur die Szene laufen lässt (z.B. die POOL=<PoolAuswahl>; Zeile mit # Auskommentierst),
dann läuft es, oder kommt genau so eine dunkle Bildschirm nur ?
Falls Du selbst mit Hilfe der Fahlerdatei und mit teilweise auskommentieren und laufen lassen das Problem nicht lösen kannst, bleibt nur der Weg mir Deine Fahrplandateie(en), und falls sie es benötigen, dazu auch Deine Fahrzeuglistendatei und Bildbibliotheken zuzuschicken, dann kann ich da näher reinschauen - falls nötig, Traffic in Debug-Modus in der Entwicklungsumgebung laufen lassen, und während der einzelne Schritte nachschauen was geht schief.
Beiträge: 173 Ort: Berlin Eingetreten: 25.07.12 Status: Offline
Eingetragen am 22.07.2024 23:34
Hallo Zoltan,
tatsächlich geht das, aber nur zwischen den einzelnen Pools.
Das war mein Fehler, aber wie bestimme ich die Häufigkeit mit die Szene abläuft.
Mit dem Life time Parameter LC?
Gruß
UlrichBearbeitet von Ulrich am 23.07.2024 14:16
Also ist die Frage eher, wie man die Wahrscheinlichkeit steuert, mit der z. B. eine $GROUP oder eine $SCENE oder so erscheint.
Meines Wissens geht das gar nicht. Also, nicht ohne schmutzige Tricks, z. B. solche Segmente komplett in Präprozessormakros packen und deren Wahrscheinlichkeit damit steuern, wie oft sie im Fahrplan aufgerufen werden.
Wenn das doch irgendwie ginge, wäre das auch für mich interessant. Dann könnte ich einiges anders machen als bisher. Dann bräuchte ich das nicht mehr mit Deko direkt in der Bewegungszeile machen.
Innerhalb eine $POOL sind die wahrscheinlichkeiten gleich. Genau so ist es innerhalb einen $GROUP / $SECTION / $PATH . Den $PATH lassen wir erst mal aus, da kann man mit einigen Tricks - Impulse - die unterschiedliche $PATH-Zeilen miteinander verknüpfen,
aber das war hier nicht die Frage.
Innerhalb von $SECTION / $GROUP und $POOL wahrscheinlichkeiten anzugeben wäre machbar, aber nicht trivial. Interessant wird das ganze in dem Ablaufmodus "Zufallsreihenfolge",
was heisst, solange wird keine Zeile wiederholt, bis alle Zeilen schon ein mal gelaufen sind.
Ich werde schon mal in die Quellen reinschauen, und sehen, was ich machen kann - aber bestimmt noch nicht in den nächsten, schon halbwegs fertigen Version, sondern nur in übernächsten.
Diese Webseite verwendet Cookies für die techn. Funktionalität und um Inhalte zu personalisieren und deiner Erfahrung anzupassen. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du den Einsatz von Cookies. » Hier mehr lesen zum Datenschutz «