-
Gesamte Inhalte
8006 -
Benutzer seit
-
Letzter Besuch
Alle erstellten Inhalte von Neo
-
Hallo, ja, über mehrere Ecken kam Franzis auf mich zu und suchte einen Programmierer, der den 3D-Eisenbahnplaner weiter entwickelt. Damals waren die Anforderungen auch noch sehr gering, Hauptsache man konnte ein paar Gleise verlegen und Züge darauf fahren lassen. Richtig Fahrt nahm der 3D-Eisenbahnplaner (und später das 3D-Modellbahn Studio) erst auf, als ich ein Forum eingerichtet habe und die Leute mit den Ideen kamen... Ich habe ehrlich gesagt mit keinen Schwierigkeiten zu kämpfen. Vielleicht habe ich auch die richtige Zeit erwischt, aber durch die heutige Digitalisierung kann jeder, der einen Computer besitzt und Programmieren kann, auch Software für einen größeren Markt eigenständig verkaufen, ohne vorher große Investitionen tätigen zu müssen. Es dauert natürlich immer eine gewisse Zeit, bis das Programm über Google gefunden wird und die Nutzerzahl wächst, diese Zeit gilt es zu überbrücken. Viele Grüße, Neo
-
Hallo, wenn es um den 3D-Eisenbahnplaner geht, muss man bedenken, dass es sich dabei um zwei Versionen handelt: Version < 6 stammt von irgendwem, ich kenne ihn nicht Version >= 6 stammt von mir, ist eine vollständige Neuentwicklung und hat mit dem 3D-Eisenbahnplaner < 6 nichts gemeinsam, außer, dass ich die Gleisdaten aus der alten Version übernommen habe. Das war eine schöne Zeit, als Kind wollte man halt nur Ballerspiele programmieren Viele Grüße, Neo
-
Hallo, die Bedingung "Zeitpunkt überschritten" ist für einen Zeitbereich gedacht, du interessierst dich aber für konkrete Zeitpunkte. Dafür kannst du direkt auf die Zeit prüfen: Alternativ (und performanter) kannst du ein Ereignis pro Zeitpunkt definieren und darin ein benutzerdefiniertes Ereignis mit den Aktionen aufrufen, dann vermeidest du Redundanzen. Viele Grüße, Neo
-
Hallo Timba, das passiert aber nur bei der Anzeige, intern rundet das Studio nicht bzw. dort wird die volle Gleitkomma-Bandbreite verwendet. Das Verhalten von Bewegungen im Studio ist stark von der Frame-Zeit (FPS) abhängig. Je weniger FPS, desto größer sind die Schritte, die pro Frame gegangen werden müssen. Bei 4x-Abspielgeschwindigkeit werden die Schritte entsprechend größer. Um allerdings negative Effekte etwas zu dämpfen werden zu große Schritte in kleinere Teilschritte unterteilt. Dennoch bleibt am Ende ein etwas zufälliges Ergebnis übrig, wie in der Realität Viele Grüße, Neo
-
Und Delphi, der Programmiersprache vom MBS Unabhängig davon finde ich die konsequente Kleinschreibung von Lua nicht besonders gut, ich hätte mir lieber ein toString() oder toNumber() gewünscht. In der Programmierung ist es wichtig, konsistent zu bleiben, und wenn man das bei Lua strikt einhalten wollen würde, würde das sehr unleserlich werden: layout:getentitiesbykeyword. Aus diesem Grund habe ich mich für camelCase entschieden und das entsprechend konsistent durchgezogen, weshalb es toTime() und nicht totime() heißt. Viele Grüße, Neo
-
Hallo Timba, hier darfst du dich nicht täuschen lassen, die Autovervollständigung beachtet nicht die Bezeichner vor dem Punkt oder Doppelpunkt, sondern nur die Bezeichner danach. Das Studio selbst kann während der Entwicklungszeit nicht prüfen, was hinter "os" steht. Es könnte sich ja um folgendes Konstrukt handeln: local os = layout print(os.time) Dieser im Studio gültige Code kann nur während der Laufzeit analysiert werden, weshalb die Autovervollständigung alle Vorschläge anzeigt. Grundsätzlich handelt es sich bei einer Zeitangabe um ein Objekt mit Methoden und Eigenschaften. So kannst du z.B. mit Zeiten rechnen und diese vergleichen: local time = layout.time + toTime("0:30") -- Halbe Stunde addieren if time > toTime("15:45") then ... end Wie die Zeit intern verarbeitet wird spielt für den Aufrufer gar keine wirkliche Rolle, wobei es auch kein Thema wäre, dem Objekt weitere Funktionen zu spendieren, um an weitere Informationen heranzukommen, wie z.B. der Stunde, Minute oder Sekunde. Viele Grüße, Neo
-
Hallo Timba, was möchtest du denn erreichen? Viele Grüße, Neo
-
Hallo, jein, der Vorschlag ist eher als Notlösung zu sehen. Besser wäre es, wenn so wenige Ereignisse wie möglich definiert werden. Sobald ihr mehrere Ereignisse habt, die den gleichen Auslöser besitzen, solltet ihr stutzig werden und prüfen, ob diese Trennung in mehrere Ereignisse wirklich Sinn macht. Sinnvoll ist sie ab V5 eigentlich nur noch, wenn es sich um völlig verschiedene Themenkomplexe handelt. Viele Grüße, Neo
-
Hallo, nein, du kannst auch bei glTF in Blender die FPS herabsetzen und erhältst eine verlangsamte Animation, muss dann aber in der Anim-Datei diese Verlangsamung bei den Frame-Zahlen einrechnen. Wenn du also von 24 auf 12 FPS herunter gehst, musst die die Frames in den Anim-Dateien verdoppeln. Viele Grüße, Neo
-
Hallo Berlioz, da deine Ereignisse alle den gleichen Auslöser besitzen (Kran nimmt Transportgut auf/ab, Variable wird gesetzt), werden deine Ereignisse alle in einem Rutsch verarbeitet. Und da du in Ereignis A die Bedingungen für Ereignis B setzt, und dort die Bedingungen für Ereignis C usw, werden die Ereignisse nicht übersprungen, sondern der Reihe nach bis zum Ende abgearbeitet, und zwar sofort. Sehen tust du natürlich nur das Endergebnis. Lösen kannst du dieses Problem, wenn du als erste Aktion in deinen Ereignissen eine Verzögerung von 0 Sekunden einbaust, dann werden die Aktionen nämlich erst im nächsten Frame abgearbeitet. Die saubere Lösung wäre jedoch das Zusammenfassen der vielen Ereignisse. Es passiert ja jedes Mal das gleiche, nur mit anderen Daten, je nach Zustand. So etwas kann man durch verschachtelte Bedingungen oder durch Tabellen lösen. Viele Grüße, Neo
-
Hallo max, du musst in Blender die FPS auf 24 setzen (Blender-Default) und dein Modell neu exportieren, dann funktioniert es: Der Hintergrund ist der: Das glTF-Format speichert Animationen nicht in Keyframes ab, sondern in Zeiten, ohne eine FPS-Angabe (wird bei Zeitangaben auch nicht mehr benötigt). Damit aber die Anim-Dateien im Studio weiterhin funktionieren, muss das Studio die Zeiten wieder zurück in Keyframes umrechnen, wofür die Standard-FPS von 24 angenommen werden. Stimmen die FPS nicht, kommen natürlich alle Keyframe-Angaben durcheinander. Ich werde das mit im Wiki erwähnen. Viele Grüße, Neo
-
Hallo, wenn du die Modelldaten zur Verfügung stellst, kann ich mal nachschauen. Bei mir ist das nicht so, aber ich kann auf deinen Bildern erkennen, das deine UI aus 2.79 importiert wurde, eventuell liegt dort die Ursache. Ich empfehle dir, beim Öffnen der Blender-Datei die Option "Load UI" zu deaktivieren, um die Standard-2.8-UI zu verwenden: Viele Grüße, Neo
-
Hallo max, das Zusammenfügen ist bereits in der aktuellen Version V5 implementiert. Viele Grüße, Neo
-
Hallo Maik, du kannst sie ganz normal weiterverwenden, auch in neuen Anlagen, die du veröffentlichst. Die Uhr ist archiviert, weil es mittlerweile ähnliche Uhren gibt, die auch die Simulationszeit anzeigen, wie z.B. SputniKKs Bahnhofsuhr (Content-ID: 2964BB28-02DB-4AFE-A31A-2CA578D77199). Viele Grüße, Neo
-
Hallo, ich sehe das Hauptsignal auf deinem Bild, links unten. Bedenke, dass die Modelle in den Kategorien "Schlagwörter" nicht nach Name, sondern nach Bewertung/Downloads sortiert werden. Viele Grüße, Neo
-
Hallo, diese Option gibt es nur für eigene Inhalte, fremde Inhalte lädt das Studio automatisch aus dem Internet herunter, sobald eine Änderung erkannt wurde. @stephan Hast du eine funktionierende Internetverbindung bei der Verwendung von V5? Viele Grüße, Neo
-
Hallo Timba, die Einträge "Zeitpunkt erreicht" haben nichts mit einer Variable zu tun, sondern mit der Simulationszeit. Wenn du die Simulationszeit auf Virtuell oder Echtzeit einstellst, wird jede Minute (der Simulationszeit) ein Ereignis "Zeitpunkt erreicht" ausgelöst. Das ist sinnvoll, um z.B. die Simulationszeit in einem Beschriftungsfeld anzuzeigen oder generisch auf eine bestimmte Zeit zu reagieren. Ich stimme dir aber zu, dass die Ereignisprotokollierung dadurch schnell unübersichtlich werden kann. Ich werde mir hier für das nächste Update eine Verbesserung einfallen lassen. Womöglich braucht es gar keine Protokollierung der Zeitänderung, die aktuelle Zeit ist ja auch jederzeit in der Statusleiste sichtbar. Auch die Filterung von Ereignissen werde ich mit dem nächsten Update vereinfachen. Viele Grüße, Neo
-
Hallo Wolfgang, man muss hier unterscheiden zwischen einfachen Variablen (Boolean, Zahlen, Texte...) und Variablen, die Referenzen enthalten (Objekte, Ereignisse). Wird eine Variable gelöscht, dann wird ihr nil zugewiesen, ein Lua-Wert, der aussagt, dass die Variable keinen Wert enthält. Im Normalfall werden die Variablen daher einfach gelöscht. Bei Variablen, die aber Objekte referenzieren, kann bei einem nil nicht unterschieden werden, ob der Nutzer die Variable löschen wollte oder den gültigen Wert "keine Referenz" setzen wollte. Lua (und das Studio) unterscheiden nicht zwischen "leer" und "keine Referenz". Aus diesem Grund bleibt die Variable in diesem Fall erhalten, wird aber auf einen leeren Wert gesetzt. Viele Grüße, Neo
-
Hallo EASY, mir sind aktuell keine Probleme bei der Verwendung von Umlauten bekannt, die Einschränkung auf ASCII bezieht sich allein auf das alte X-Format. Viele Grüße, Neo
-
Hallo, das ist aktuell nicht vorgesehen. Viele Grüße, Neo
-
Hallo, nein das funktioniert nicht, mit Schlagwörtern kannst du keine Variablen gruppieren. Schlagwörter dienen dazu, Module oder Objekte zu klassifizieren, nicht deren Variablen darin. Viele Grüße, Neo
-
Hallo, du kannst auch Schlagwörter zu Modulen hinzufügen, genau so wie du Schlagwörter zu Objekten hinzufügst (+ Symbol -> Variable -> Schlagwort). Nein, du kannst auch in der grafischen EV gezielt auf Module von Variablen zugreifen, durch Verwendung von Variable (Erweitert): Viele Grüße, Neo
-
Hallo, den Verbesserungsvorschlag habe ich mir für das nächste Update notiert. Viele Grüße, Neo
-
Hallo Timba, die Modulvariablen gelten nur für das jeweilige Modul. Das ist auch der Grund, warum du bei der Referenzierung einer Modulvariable auch immer das entsprechende Modul mit angeben musst. Globale Variablen gibt es in V5 nicht mehr, die globalen Variablen aus V4 sind nun Teil des obersten Moduls. Viele Grüße, Neo
-
Hallo Timba, jedes Modul besitzt eine eigene Liste von Variablen. Stelle sicher, dass das richtige Modul selektiert ist, wenn du eine Variable erstellst und bedenke, dass die Variablenliste eines Moduls erst sichtbar wird, wenn mindestens eine Modulvariable existiert. Viele Grüße, Neo