-
Gesamte Inhalte
5506 -
Benutzer seit
-
Letzter Besuch
Alle erstellten Inhalte von Andy
-
Pffft, dann rauchen die Blumenauer ihre Pflanzen eben selbst Angesichts der Klimaerwärmung werden sie sowieso auf Kaktus umsteigen.
-
Wichtig, zum Starten der Anlage den roten Automatik-Knopf drücken und dann laufen lassen (oder umgekehrt). Und nochwas Neo: Wenn Du nicht auf den ersten Blick erkennen kannst, was da los ist, dann laß es! Du hast wichtigere Dinge zu tun und ich werde die V5-Version sowieso voll auf den Kopf stellen. Dann wird halt erstmal alles deaktiviert, was stört und Modul für Modul umgebaut. Ich pack das! Gruß Andy
-
05BB3DF4-5B0A-485E-8D0F-8A4DC23309E9 als Entwurf hochgeladen. Das ist die V4-Version, die schön läuft. Auf V5 oben gezeigte Probleme. Unten angehängt die Version, aus der ich von dieser auf V5 eingelesenen alles rausgeworfen habe, was nicht für das Problem relevant ist. Hier ist alles okay. Ergänzung: Der Ticker ist ein 0,1s - Ticker, der die Variable Subticks incrementiert. Ist sie 10, wird die genullt und wird Subticks 0 wird Minute eins hochgezählt. Dementsprechend dann auch Stunde. Beides für die hintergründige virtuelle Zeit, die nicht der EV-virtuellen-Zeit entspricht, weil das Format für Berechnungen unbrauchbar ist/war. Dann trotzdem noch zwei Bilder: das Erste zeigt ein in obiger Version zusätzlich eingefügtes Ereignis, das die EP stoppen sollte. das Zweite zeigt, dass Minute auf 60 gekommen ist und dieses Ereignis nicht eingetreten ist. TickerMinimal.mbp
-
Ich hänge das mal hier rein, weil es den Beta-Thread möglicherweise zu stark belasten wird. Ich habe bereits mit dem einfachen Ticker Probleme. In der Anlage gibt es einen Ordner Syncticker (der genauso auch noch in der alten V4-Anlage im Katalog ist), der Ticker läuft in V4 prima. Er läuft auch prima in V5, wenn ich alles andere rauswerfe. Siehe Log-Ausschnitt. Der Syncticker ist ein 0,1 s Endlos-Ticker. Er zählt Subticks hoch, wenn das bei 10 ist wird es wieder genullt und dann soll genau das passieren. (Bedingung siehe Bild, die zweite Bedingung ist nur Kippschalter auf Ein). [20:50:14] Subticks (_Compatibility_Delay (2)): Ereignisse, "Syncticker" [20:50:14] Modul-Variable wird gesetzt -> Ereignisse, "Subticks", 0 [20:50:14] Tick Minute [20:50:14] Minute Überlauf [20:50:14] Minute Überlauf und Stunde Überlauf [20:50:14] Tick Minute (_Compatibility_Delay): Ereignisse, "Subticks", 0 [20:50:14] Modul-Variable wird gesetzt -> Ereignisse, "Minute", 27 So soll es sein! Wenn ich alles so lasse, wie es aus der V4-Anlage kommt und nichts lösche sieht es etwas anders aus. [20:03:29] Subticks (_Compatibility_Delay (2)): Ereignisse, "Syncticker" [20:03:29] Modul-Variable wird gesetzt -> Ereignisse, "Subticks", 0 [20:03:29] Tick Minute [20:03:29] Minute Überlauf [20:03:29] Minute Überlauf und Stunde Überlauf Das Tick Minute (_Compatibility_Delay) kommt nicht. Wird jedenfalls nicht angezeigt. Klar kommen nun noch andere Dinge, aber die Delay-Meldung fällt ganz aus. Gleichwohl wird Minute tatsächlich hochgezählt. Wäre ja verzeihbar, wenn ich anhand der Delay-Meldung nachvollziehen könnte, wann das blöde Ding es schafft irgendwann mal zufällig Minute auch auf 60 zu setzen was ja vollkommen unmöglich sein sollte. Das kann eigentlich nur passieren, wenn dieser rekursiv-Algorithmus das Kommando einschachtelt und in so einem Flow zweimal dran vorbeikommt und das Minuten-Delay noch nicht zugeschlagen hat, Minute also immer noch auf 59 steht, Bedingung immer noch wahr und poff. Eigentlich müßte ich dazu Tick Minute wenigstens mal eine Ebene eingerückter vorfinden. Ist aber nicht. Ehrlich, das ist mir zu hoch. Ich mach jetzt nochmal ein Event rein, das reagiert, wenn Minute auf 60 kommt und setze irgendwas Blödsinniges rein, was das Log sofort auf Stop zwingt. Mal sehen, ob ich's so fangen kann. Ansonsten bin ich da mit meinem Latein am Ende.
-
Naja, es wird eine Objektvariable davon direkt beeinflusst. Und die dritte grüne Zeile bleibt auch genau so erhalten, wenn Schalterchen2 weg ist.
-
Hallo Neo, nochmal kurz zurück auf den oben beschriebenen Flow. Mir wär's wirklich lieber gewesen, wenn eine Aktion ein Flag gesetzt hätte, dass noch mal ein Durchlauf nötig ist und erst am Ende des Gesamtcodes alles nochmal durchlaufen wird, solange Flags gesetzt sind. Das rekursive Verhalten ist verdammt schwer nachvollziehbar und außerdem gefährlich. Gruß Andy p.s.: Anhang bringt den Stack ganz einfach zum Überlaufen. Übrigens warnt er auch nicht, wenn ich Schalterchen2 weglösche, dass dies noch in Ereignissen drinhängt (wie es in V4 der Fall war). Und den Namen behält er auch noch bei (Kippschalter Aktionen - hier jetzt rausgelöscht). kompatestV5overflow.mbp
-
Geben die die Polygone in Millionen an? Auf den ersten Blick sieht's doch minimal aus. Es könnten die Texturen sein, oder? Die sind vermutlich höherauflösend als wirklich nötig.
-
Hallo, da ich da immer noch einem äußerst üblen Bug nachjage, muß ich mir einige Beispiele zurechtmachen. Kann ich, falls interessant, hier dann auch posten. Mit den hier angehängten Beispielen mache ich zum Einen einen Kompatibilitätstest eines nicht ganz einfachen Konstrukts, und dann schauen wir mal, wie V5 intern tatsächlich arbeitet! Wen das interessiert, Konzentration einschalten, ansonsten beim nächsten Poster weiterlesen. Also: Um was geht's: Ich habe hier einen Kippschalter mit zwei Schalterchen. Lege ich den Kippschalter um, triggert er das erste Schalterchen. Das zweite ist eigentlich nur da um Nebenwirkungen zu checken. Die beiden Ordner haben je zwei Ereignisse und die Ordner sind identisch, nur die Titel sind unterschiedlich. Auch hier ist der zweite Ordner nur da, um die Situtation noch etwas zu verkomplizieren. Beide Ereignisse arbeiten mit dem _Trigger1-Trick, sollen also universell einen schaltenden Schalter verarbeiten. Die Schalterchen haben eine Objektvariable mit dem Namen Wert, der am Anfang auf nix steht. Außerdem gibt es noch eine normale Variable namens count, die einfach nur hochzählt, wie oft da wirklich was gemacht wird. 1.Ereignis: der betätigte Schalter soll seine Objektvariable von nix auf A stellen, dann drückt er sich selbst nochmal 2.Ereignis: nun von A auf B und auch nochmal drücken, was dann keine Wirkung mehr haben sollte. kompatestV4V5 kann man in V4 laden. Kippschalter schalten, das Schalterchen1 endet mit Wert B. Fein. Aber wenn man sich count mal ansieht, das steht auf 6. wtf würde der Ami sagen. Ich will da jetzt gar nicht drauf eingehen, warum. Das Endergebnis ist wichtig und das ist wie gewünscht. kompatestV4V5 nun in V5 laden. Kippschalter schalten, das Schalterchen1 endet mit Wert B. Und count steht tatsächlich auch auf 6. Hölle, hölle, aber es ist kompatibel! Jetzt schmeiße ich mal alle Kompatibilitätsdelays raus. So geschehen in kompatestV5, was sich natürlich nur in V5 laden läßt. Nun mal Ereignisprotokoll einschalten und Kippschalter schalten. Jetzt wird's interessant. Das Schalterchen1 endet mit Wert B, aber count endet nun, wie es ein 'normaler' Programmierer erwarten würde, auf 2. Es sind nur zwei agierende Aktionen nötig gewesen! Noch viel interessanter ist nun aber, wie das Ergebnis zustande gekommen ist. Wie zu erwarten, schaltet das erste Ereignis in Ordner1 das Schalterchen auf A, aber - wer nun linear 'normal' weiterdenkt, sieht sich getäuscht - es ist NICHT sofort das zweite Ereignis des ersten Ordners und es ist NICHT das zweite Ereignis des zweiten Ordners das nun von A auf B setzt. Sondern: man sehe sich den Flow in der Ereignisprotokollierung an. Hier wird nun in der Tat mit rekursiven Aufrufen gearbeitet! d.h.: das von Ereignis 1 ausgelöste Selbstschalten des Schalterchens löst einen kompletten neuen Aufruf der EV aus! Es werden nun sofort erneut alle Ereignisse ausgeführt, die sich auf das Schalten eines Schalters beziehen! Wonach dann Ereignis 2 des ersten Ordners auf B setzt (aber halt erst, nachdem nochmal - natürlich jetzt ohne Auswirkung - über das erste Ereignis gelaufen wurde!). Bis der zweite Ordner mal drankommt, ist der Käse schon gegessen. Schalterchen steht schon auf B und es muß da nichts mehr gemacht werden. Also: die Funktionsweise muß nun verinnerlicht werden, denn sie bedeutet, dass da mitten in der Aktionsliste eines Ereignisses ganz schön viel mit einer Anweisung passieren kann. Irgendwie sehe ich da allerdings auch die Gefahr einer Endlosschleife mit immer tiefer laufendem Stack - also Crash... Gruß Andy ps.: Selbstverständlich ist mit diesen rekuriven Effekten diese Programmierung des Problems alles andere als ideal, denn insgesamt kümmert er sich um 17 Ereignisse. Die Lua-Version ist da optimaler... kompatestV4V5.mbp kompatestV5.mbp kompatestV5Lua.mbp
-
Link Viel Spaß beim analysieren
-
Moin Hans, deswegen warst Du so ruhig in letzter Zeit Irgendwo im Netz gibt's ein Video, wie ein anderes Team(!) diesen Hbf mit einem anderen System aufbaut. Kannst Du mal abschätzen, wo Du stehst und was noch kommt. Direkten Link finde ich jetzt nicht wieder, aber mit dem Suchbegriff Frankfurt Hbf virtuell findest Du noch Anschauungsmaterial ohne Ende. Gruß Andy
-
Noch ein Beispiel zum Thema Kompatibilitätkonflikt. Es kann nämlich noch schlimmer kommen! Dann ist Neo machtlos! In V4 hatte ich z.B. Ringschuppentore erst diskret als Objekte benannt und konnte ihre einzige Animation 'Tore' einstellen. Später habe ich das verallgemeinert und benutzerdefiniert $($_Trigger2.Block).Lokschuppen als Objekt angegeben. Der Haken: weil da in Animationen noch 'Tore' drinstand, hat er's gefressen und auch gemacht. ABER: mit der späteren Objektangabe wäre es ihm selbst in V4 zu indirekt geworden. Er hätte da bei Neueintrag gar keine Animation mehr gefunden. Jo, und genau das passiert dann bei V5 auch. Fazit: ab einem bestimmten Punkt kann er gar keine Kompatibilität mehr aufbauen. Da muß der Anlagenautor eben die Anlage pflegen, wenn sie erhalten bleiben soll. Insbesondere, wenn er selbst vorher etwas inkompatibel war... Gruß Andy
-
Sorry, mit VB kann ich nicht helfen. Was ich aber für die Ansteuerung sagen kann: Es gibt ja zwei Kanäle. Dementsprechend solltest Du zwei Threads anlegen! An den Ereigniskanal brauchst Du nichts senden, der ist nur für die Ausgabe zuständig. Vergiß beim Senden das abschließende CarriageReturn IM Sendestring nicht, sonst ist der Befehl nicht komplett und nichts passiert. Nach dem Senden mit der Receivefunktion auf die Antwort warten. Wenn mal die erste einfache Anweisung mit Antwort funktioniert, dann ist der Rest nur konzentriertes Studium der Wiki, was gesendet werden muß. Es ist dann fast einfach. String zusammenbasteln, wegschicken, lauschen, auswerten. Und außerdem: Teste nichts mit der neuen V5-Beta. Da ist die Schnittstelle noch Baustelle. Gruß Andy
-
Siehst Du Manni etwa? Also...!
-
Eigentlich... könnten wir das mit Lua alles selbst rechnen. Aber das wäre ja wieder aktives Terraforming. Hätte man Zugriff auf die Bodenplatten höhen/löcher/textur-Daten könnte mal sehr viele Dinge selbst machen, wie z.B. meine Idee mit der 'Sprühlok', sehr exakte Schnitte, eine komplette Bodenplatten-Datenverschiebung wenn die Bodenplatte mal nach links oder hinten erweitert wird etc., es könnten etliche Feature-Wünsche gestrichen werden - und es würden Daten weder erzeugt, noch gelöscht werden. Also - harmlos! Ich meine, Neo sollte da vielleicht doch einen Gedanken dran verschwenden (wenn die derzeitigen Funktionen stabil sind!). Ich habe übrigens jetzt nicht geschaut, ob das nicht vielleicht sogar schon möglich ist. Gruß Andy ps: @Neo. Wichtig: Ich habe mal auf meine mit V4 erstellte Anlage in V5 laufend meinen Logger mitlaufen lassen. Jeder Variablenname wird da auf der Schnittstelle von je 3 Anführungszeichen ummantelt. Nur, für den Fall, dass dies noch nicht aufgefallen ist.
-
Ändere mal den Eintrag Deiner Lok OV Umschaltlok vom Typ Text in Typ Objekt und wähle dann dort die andere Lok an. p.s.: bin an einem noch fieseren Fehler dran. Könnte böse Überraschungen geben heute.
-
VisualStudio ist eine Entwicklungsumgebung. Das sagt nichts darüber aus, mit welcher Programmiersprache Du arbeitest. Nur so läßt sich damit ja wohl gar nichts visualisieren. Bei C kann ich helfen, bei VB nicht. Andererseits hat EASY für VB ja doch alles gezeigt. Mittlerweile gibt's hier auch Posts, die beschreiben, wie man' s einfach mit Python macht. Also, hat das Kind 'nen Namen? Gruß Andy
-
Bei der Ereignisprotokollierung, wenn die Variablenübersicht soviele Variablen beinhaltet, dass der Scrollbalken ran muß, springt dieser immer wieder sofort nach oben. Habe jetzt mal ein Funktionsskript auf oberstem Niveau geschrieben, und dann mal mehrere Ereignisse nach Lua gewandelt und in ein Lua-Skript eines Ordners (der ja jetzt Modul heißt, das muß man auch erstmal checken) zusammengefasst, dass das Erste verwendet. Das ist sehr sehr schön gelöst! Noch ein Wunsch: könnte man Dinge über das Selektionsfenster in eine Gruppe reinstecken bzw. rausholen? Es ist doch sehr umständlich das manuell im normalen Arbeitsbereich zu machen. Das Suchfenster im Selektionsfenster finde ich persönlich nicht so toll. Das war in V4 praktischer. Jetzt muß man die Suchebene immer wieder neu eingeben, in der man gerade arbeitet. Es wäre sogar noch viel schöner, wenn man z.B. bei einer Einzelauswahl eines Elements im Selektionsfenster direkt auf das Eigenschaftsfenster rübergehen könnte und da mal schnell eine Korrektur vornehmen kann, um dann im Selektionsfenster direkt mit dem nächsten Element weiterzumachen. Gruß Andy
-
pffft. Meine Gärtnerei in Blumenau nimmt auch Online-Bestellungen an
-
Hallo Neo, haben wir mittlerweile eine Tasten/Mausfunktion, die nur die z-Position der aktiven Kamera beeinflußt? Ich möchte doch auch mal in Tunnel oder sonstwas reinschauen. Gruß Andy
-
Hehe, fehlt jetzt vom gleichen Typ nur noch die alte Milchkanne, an der jede Lokalbahn zum Blümchenpflücken anhalten muß
-
Nanu? Da war doch was
-
Ja bitte. Nehmen wir z.B. das Riesenrad. Das möchte ich (bevor ich es voll drehen lasse) erstmal mit Leuten be/entladen. Sind also 11 Extra-Stopps innerhalb der Animation. Und eine Gondel sollte dann schon recht mittig unten stehen. Also, ein Intervall will ich da schon erwischen, muß also auslesen. Auch der Shooter hat solche Haltepunkte. Gibt bestimmt noch viel mehr Dinge. Die anderen Zugriffsfunktionen hatte ich im Moment auch gefunden. Danke dafür. Muß mal schauen, wie ich sicher an die Auto-Vervollständigung komme. Da ist ja richtig viel dabei! Da gibt's ja nun richtig viel zum Experimentieren! Es fängt an, richtig interessant zu werden. Gruß Andy
-
jo, leer/leer wurde in V4 ignoriert, in V5 wirkt '[Leer]' generell fatal. Neo kämpft da gerade noch mit, wie er es beim Einlesen einer alten Anlage interpretieren soll..An anderer Stelle bricht ein [Leer] ein Ereignis direkt ab (hatten wir gerade). Jedoch scheint es an dieser Stelle eher wie alle/alle zu wirken. Die Ereignisprotokollierung (...die das Setzen von Geschwindigkeiten nun doch immer noch nicht drin hat - grrrr) meldet da auch keinen Fehler. Beim Drücken des grünen und gelben Tasters schon (wegen den Leer in Verknüpfungen lösen/setzen). Gruß Andy
-
Neo, kannst Du schon mal ein erstes Geheimnis verraten? Ich würde gerne mal meine Seilbahn senkrecht zum Universum halten, wenn sie über die verschiedenen Winkelgrade der Fahrseile an den Masten fährt und BahnLand's Kameratrick rauswerfen. Dafür bräuchte ich die internen Namen der Objekte für die Winkel, wenn's geht auch gleich die der Koordinaten. Gruß Andy p.s.: die Winkelwerte sollen dabei aus der SX1-Dummy-Lok ausgelesen werden und bei Änderung an die Gondelaufhängung gegeben werden. Es wird also keine Fahrzeugposition beeinflußt, was ja (fahrend) fatal sein könnte. Andererseits wäre letzteres auch ganz praktisch, um ganze Züge (im Stopzustand) auf eine Anfangsposition zu stellen. Das würde mir sehr sehr weiterhelfen, weil ich eine definierte Grundstellung bei Automatik Ein brauche. p.p.s.: gibt es auch Zugriff auf den Fortschrittspunkt einer Animation, lesend/schreibend? Das wäre enorm hilfreich.
-
Ich hätte dann noch einen Parserfehler bei der Aktion Kupplung de/aktivieren. Fehlalarm! Ich habe da wirklich _Trigger1.Kupplung im Original. Sorry Andy