Jump to content

Neue Beta-Version V5


Neo

Empfohlene Beiträge

vor 8 Minuten schrieb Goetz:

Und sie ist ein ideales Übungsobjekt für die Rekursion

Wenn ich da an die trockenen Übungen aus dem Informatikunterricht in der Schule zurückdenke, niemand konnte sich mit den Türmen von Hanoi wirklich anfreunden. Hätte es doch nur damals schon ein MBS gegeben :D

Link zu diesem Kommentar
Auf anderen Seiten teilen

Gerade eben schrieb Neo:

Hätte es doch nur damals schon ein MBS gegeben

Ernsthaft:
Das MBS wäre - insbesondere jetzt in der Version 5 - eine fantastische Lernhilfe für alle, die in die Programmierung einsteigen wollen. Egal, ob Schüler, Studenten, Lehrer oder Profs. Weil ein Zug, der das richtige Gleis findet eine viel schönere Belohnung ist als ein "Hallo Welt" auf dem Bildschirm.

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 41 Minuten schrieb Neo:

Ansonsten müsstest du per Bedingung prüfen, ob ein Objekt ein bestimmtes Schlagwort/Variable besitzt

In der Tat habe ich es so gelöst. Meine Fahrpläne können einiges, brauchen dafür aber einen Status, der in einer OV hinterlegt ist. Diese können sowohl von außen, als auch intern geändert werden und der Fahrplan muß darauf reagieren. Da ist eine Zugankunft, ein Auftrag der noch nicht abgewickelt werden kann etc.

Nach einer Statusänderung muß ich jetzt aber jedesmal den als Schalter ausgelegten Fahrplan noch einmal 'Umschalten' um überhaupt ein Ereignis auszulösen. Damit geht das schon. 'Sauberer' wäre es, wenn man auf ein Ereignis Variable FAHRPLAN.Status gesetzt reagieren könnte. Da spart man das Schalten und könnte auch eine Beschriftung oder so als Basisobjekt nehmen. Also, da läge der Vorteil. Aber es müssen dann ja leider zwei Inputs beim Setzen des Ereignisses geschehen. Ein wenig Aufwand wäre das wohl schon.

Und Danke für den anderen Tipp.

@EASY
Sehr sehr schön! Ich hoffe, mit den neuen Möglichkeiten hast Du wieder richtig Lust, Dich auszutoben. Da ist nicht nur Euler angesagt, sondern eine ganze MBS-Physics-Engine.

Mein Lua-Feedback bislang: null problemo.

Gruß
  Andy

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

... danke für Klicks... schön, dass es gefällt...:)

Eigentlich wollte ich nur wisen, wie man etwas "allgemein" programmieren kann um mit einem Kran verschiedene Ladesituationen darstellen zu können...
(...momentan sind es 2 Listen (Objekt und Ziel) die abgearbeitet werden und der Situation entsprechend verändert werden...)
... der Rest ist meinem Spieltrieb geschuldet und sind natürich erste Gehversuche in Lua. Da ich (immer noch) keine Anlagen baue, liegt mein Schwerpunt bei Lua.

vor 1 Stunde schrieb Goetz:

Das MBS wäre - insbesondere jetzt in der Version 5 - eine fantastische Lernhilfe für alle, die in die Programmierung einsteigen wollen. Egal, ob Schüler, Studenten, Lehrer oder Profs. Weil ein Zug, der das richtige Gleis findet eine viel schönere Belohnung ist als ein "Hallo Welt" auf dem Bildschirm.

... bevor es die Schnittstelle gab, hatte ich noch sehr wenig Ahnung von VB. Ich habe das MBS oft dazu benutzt um das Ergebnis zu visualisieren... und werde es mit Lua auch tun.

@Neo
... da alles noch etwas neu ist, ist es schwer jetzt schon ein größeres feedback zu geben.
Die Möglichkeiten, die sich durch die Implementierung von Lua ergeben sind natülich gewaltig, zumal man jetzt auch mal "vernünftig" mathematische Hilfsmittel anwenden kann.
Bei meinem Lieblingsthema des Quaterions bin ich dann leider an der "Sparversion" von Lua im MBS teilweise gescheitert. Ich habe zwar ein Beispiel gefunden für Quaterion->Euler, dies benutzt aber die Funktion "math.atan2"... die ist aber nicht implementiert...

Will sagen, dass man sich auch erst an die gegebenen Möglichkeiten herantasten muss und eben nicht alles was Lua kann auch im "MBS-Lua" möglich ist.

Natürlich sehe ich ein, dass Du abwägen mußt zwischen Umfang und Sicherheit, was von Lua Du für das MBS "frei gibst" und was nicht.
Natürlich mußt Du mir (oder solltest) eingestehen, dass solche Möglichkeiten auch Begehrlichkeiten wecken... (nach den Erfahrungen mit der Schnittstelle;))

Entweder bin ich noch nicht dahinter gekommen oder es fehlt (mir)...
... ich würde mir noch so etwas wie einen "$" Befehl für Variablen wünschen... Bei der Eingabe von "$" kann ich auswählen zwischen Objekt und Ereignis/Modul und es erscheint eine Liste aus der ich auswählen kann... beim anschließenden ".variables" muß ich den Namen selbst ["eintragen"]... hier wäre eine Auswahlliste (bei vielen) Variablen bestimmt hilfreich...

Gruß
EASY

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

@EASY, kopiert aus der Lua 5.3. docu

8.2 – Changes in the Libraries

  • The bit32 library has been deprecated. It is easy to require a compatible external library or, better yet, to replace its functions with appropriate bitwise operations. (Keep in mind that bit32 operates on 32-bit integers, while the bitwise operators in Lua 5.3 operate on Lua integers, which by default have 64 bits.)
  • The Table library now respects metamethods for setting and getting elements.
  • The ipairs iterator now respects metamethods and its __ipairs metamethod has been deprecated.
  • Option names in io.read do not have a starting '*' anymore. For compatibility, Lua will continue to accept (and ignore) this character.
  • The following functions were deprecated in the mathematical library: atan2, cosh, sinh, tanh, pow, frexp, and ldexp. You can replace math.pow(x,y) with x^y; you can replace math.atan2 with math.atan, which now accepts one or two arguments; you can replace math.ldexp(x,exp) with x * 2.0^exp. For the other operations, you can either use an external library or implement them in Lua.
  • The searcher for C loaders used by require changed the way it handles versioned names. Now, the version should come after the module name (as is usual in most other tools). For compatibility, that searcher still tries the old format if it cannot find an open function according to the new style. (Lua 5.2 already worked that way, but it did not document the change.)
  • The call collectgarbage("count") now returns only one result. (You can compute that second result from the fractional part of the first result.)
Link zu diesem Kommentar
Auf anderen Seiten teilen

Weißt du, ich habe den Ehrgeiz eine Anlage zu bauen. Ich bin geduldig, jedes neue Programm was man bekommt, da muß muss man sich mit beschäftigen, wenn man es nutzen will.

Aber ich habe vielleicht einen Beitrag für den neuen Katalog. Ihr habt mir schon so viel gegeben, das ich gerne auch etwas teilen möchte. Nicht spektakulär aber nützlich... wenn es passt und verwendbar ist...

textur.gif

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hello,

I've the following questions concerning the events and espescially the new "IF" condition :

  1. When one goes from the event's conditions to Lua and changes something in the Lua script, is it possible to go back to the standard 3D conditions.  In the sample D Lua below, one can see that the buttons to go back are grised after I add the "else" condition in Lua.
     
  2. In the Demo V5, the "else" condition exists in the 3d event's definition (see "If-else-1") as confirmed in Lua (see "If-else-2").  The question is : why is the last action exeuted in the else condition; I see no difference between the conditions with the value 1 and 2 in the standard 3d development?
    Notice also that, here, one can switch from 3d to Lua and back.

     

Thank you

 

D Lua.GIF

if-else-1.gif

if-else-2.gif

Link zu diesem Kommentar
Auf anderen Seiten teilen

ich habe auch noch was gefunden.
Nach dem Ändern der Bezeichnung einer Objektvariablen hat er überall erstmal nur den alten Namen drin, mit dem er auch arbeitet (hier 'Auftrag' des Objekts 'Auftragshandler'. Der neue Name ist 'Auftraggeber'.) Ist das erste eine Zuweisung, legt er den natürlich neu an und keiner merkt den Fehler. Liest er zuerst, sind wir wohl wieder am Nil.
Im Bild habe ich die ersten beiden Zugriffe korrigiert, dann haben wir die, wie's unkorrigiert ist.
Schaut man sich solch eine Zuweisung mal an, hat er dort den neuen Namen in der Auswahlliste (!), den alten nicht mehr. Jetzt muß man irgendwie Glück haben, an die richtige Stelle zu klicken. Dann übernimmt er es auch. Ansonsten bleibt er da recht hartnäckig. Schaltet man auf Lua, sieht man, dass er wirklich den alten Namen verwendet.

Noch ein Wunsch:
Wie bereits erwähnt, arbeite ich öfters mit einer Objektvariable Status, die dann einen Texteintrag bekommt. Es wäre schön, wenn wir im Suchfenster auch eine Klasse 'Strings' hätten und nach derlei Texten suchen können. Texte im Code lassen sich derzeit nicht finden.

Gruß
  Andy

p.s.: die sichere Klicksequenz um den Namen doch anzupassen: erst einen anderen Namen auswählen, abklatschen, und dann nachkorrigieren.

oldnames.jpg

Bearbeitet von Andy
p.s.
Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 2 Stunden schrieb ademes:

Notice also that, here, one can switch from 3d to Lua and back.

You can switch back and forth as long as you don't alter the script. Once you've changed it, it's not possible to convert it back because Lua offers many commands for which there is no equivalent in the graphical EV.

 

vor 2 Stunden schrieb ademes:

why is the last action executed in the else condition

Because you've placed the last command in the lower box of your condition. The upper box (above the thin black line) is for all "condition is met" cases. The lower box (below the thin black line) is for the "condition is not met" case.

1341399726_if_thenelsebox.jpg.5fd52d50caf91dafe45c460c10fc44ac.jpg

Bearbeitet von Goetz
Bild hinzugefügt
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

@Andy ... danke für den Hinweis der Lua Doku...

@Neo ... auch wenn ich "math.atan2" drin lasse kommt keine Fehlermeldung... und es kommen die gleichen Werte wie mit "math.atan" (was wieder dem Hinweis von Andy entsprechen würde)... so komme ich für mich zu der Fragestellung, ob nun die ganze math-Klasse impementiert ist und ."atan2" nur bei Dir nicht in der "Vervollständigungsliste" drin ist... sieht das nun Lua nicht so eng? ...oder wie ist das zu verstehen?

vor 3 Stunden schrieb BahnLand:

... eigentlich sollte man die "Fracht-Arbeiter" öfters auf dese Art und Weise "Türme von Hanoi" spielen lassen. :D

... nun stell Dir einmal vor es kommt ein Kranfahrer im Hamburger Containerterminal auf die Idee9_9...

Gruß
EASY

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

vor 23 Stunden schrieb EASY:

hier wäre eine Auswahlliste (bei vielen) Variablen bestimmt hilfreich

das stimmt, so eine Liste gibt es in Lua noch nicht. Ich werde mir hier etwas einfallen lassen.

vor 21 Stunden schrieb Andy:

The following functions were deprecated in the mathematical library: atan2

Das war mir bisher auch neu, dass es atan2 früher gab und jetzt in atan integriert wurde. @EASY was die grundlegenden mathematischen Funktionen angeht, hast du im Studio vollen Zugriff auf alles was Lua anbietet.

vor 21 Stunden schrieb CC.SDL:

Aber ich habe vielleicht einen Beitrag für den neuen Katalog.

Hast du die Texturen selber erstellt? Wenn ja, dann kann ich diese gern mit in den Katalog aufnehmen, schick sie mir einfach an die E-Mail, die hier unten auf der Kontakt-Seite angezeigt wird.

vor 18 Stunden schrieb Andy:

Es wäre schön, wenn wir im Suchfenster auch eine Klasse 'Strings' hätten und nach derlei Texten suchen können. Texte im Code lassen sich derzeit nicht finden.

Gern erweitere ich die Suche nach Variablennamen.

vor 14 Stunden schrieb EASY:

sieht das nun Lua nicht so eng? ...oder wie ist das zu verstehen?

Ich wusste das bisher auch nicht. Meine Code-Completion-Liste bildet nur die offizielle Lua-Docu nach, dort taucht atan2 nicht auf. Schaut man allerdings in den Code, sieht man, dass Lua diese Funktionen doch noch anbietet. Es handelt sich also vorwiegend um eine Kompatibilität alter Skripte. Neue Skripte sollten nur die offiziellen Befehle verwenden, da es durchaus sein könnte, dass die alten Funktionen in neuen Lua-Versionen rausfliegen.

vor 3 Stunden schrieb EASY:

warum geht eine Objektvariaben-Zuweisung (ich möchte die Variable prinzipiell erstellen) an dieser Stelle nicht?

Weil Code in den Modulskripten bei jeder Kompilierung der Skripte ausgeführt wird, und das mitunter beim Laden der Anlagen geschieht, wobei die Anlage noch gar nicht vollständig vorliegt. Auch werden die Skripte bei jeder Änderung der EV neu kompiliert. Wenn du etwas einmalig und kontrolliert initialisieren willst, solltest du den Weg über ein konkretes Ereignis gehen.

Viele Grüße,

Neo

Link zu diesem Kommentar
Auf anderen Seiten teilen

Mahlzeit,
ich bin noch ein wenig übernächtig, weil ich heute bis morgens um halb 10 eine Version flicken mußte. Meine Anlage bedarf einer Grundstellung und ich bin dann mitten im Ablauf am werkeln und drücke gewohnheitsmäßig auf Speichern. Patsch! Das war's. Die Vorgängerversion zwar nur einen Tag alt, aber schon hoffnungslos veraltet.
Mein Vorschlag zum Seelenheil: da man das Speichern gewohnheitsmäßig viel zu schnell 'abklatscht', würde ich bitten, dass von der derzeitigen Anlage ein .bak erstellt wird.
Ein altes .bak weglöschen, die zu überschreibende in .bak nennen und dann neu speichern. Also nur ein .bak im Katalog. Das hätte mir heute nacht einige Haare gerettet.

Gruß
  Andy

Link zu diesem Kommentar
Auf anderen Seiten teilen

@Neo

... wie kann ich eine Objektvatiable vom Typ "Objekt" mit Lua löschen?
... bei z.B. Typ Zahl geht es mit .variable["xyz"]=nil
... wenn ich diese Zuweisung beim Typ "Objekt" mache bleibt sie erhalten und hat den Wert "Leer".

Hintergrund: ich beschäftige mich etwas mit einer Kransteuerung. Da Objektvariablen leider kein Array(Feld) sein können behelfe ich mir in dem ich beim Kran Objektvariaben mit fortlaufender Zahl im Namen erzeuge. Wenn das Objekt ("objektx") aufgeommen ist und bei "zielx" abgesetzt, dann würde ich gerne diese beiden Objektvariablen wieder löschen...

137927594_variableLschen.jpg.2ca02241dd630bf2d28cece649c7f47f.jpg

Gruß
EASY

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 3 Stunden schrieb Neo:

 

Zitat

Hast du die Texturen selber erstellt? Wenn ja, dann kann ich diese gern mit in den Katalog aufnehmen, schick sie mir einfach an die E-Mail, die hier unten auf der Kontakt-Seite angezeigt wird.

Hallo, ja, die Texturen sind von mir. Abgespeichert *.png, aber noch in großer Auflösung. 14 Stück gesamt 263Mb. Soll ich sie verkleinern, wenn ja in welche Göße.

Sonnige Grüße von mir.

 

Bearbeitet von CC.SDL
Link zu diesem Kommentar
Auf anderen Seiten teilen

Wenn man die EV aufklappt, beginnt sie oben mit Timer, Variablen, Skript.
Geht man dort in die Variablenliste und ändert einen Namen, wirkt sich das nicht auf den Programmcode aus. Sehr fatal!
Außerdem wäre es sehr schön, wenn man hier einen Timer oder eine Variable in ein Modul rüberziehen könnte. Von V4 kommend landet alles auf oberstem Level. Später möchte man es schon ordnen.

Gruß
  Andy

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 7 Stunden schrieb brk.schatz:

Texturen: wenn du sie nach dem dualen Zahlensystem (2er Potenzen) erstellst, gibt es keine Probleme mit der Übernahme und ist dann für jede(n) sofort einsetzbar....

 

Hallo und guten Morgen,

danke Karl, ich denke mal das ich das hinbekomme. War das nicht mal Unterrichtsstoff 6.-7. Klasse? Nun alle Informatiker wissen warum sie lange gerlernt haben. Ist schon wahnsinnig cool, wer das mit den Zahlen drauf hat.

Rechnerisch müssten meine Grüße an euch im Binärcode aufgeteilt werden können 9_9

Bearbeitet von CC.SDL
Rechtschreibung
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

auf Grund von eurem Feedback habe ich die Farben des Gleiskontakts gedreht. Bisher bedeutete "Grün", dass der Gleiskontakt auslöst, wenn ein Fahrzeug aus der Richtung, in die der Pfeil zeigt, den Kontakt überfährt. Intuitiv haben die meisten Leute den Pfeil aber so interpretiert, dass der Gleiskontakt auslöst, wenn ein Fahrzeug in die angegebene Richtung fährt. Zugleich habe ich weitere Farbvariationen und die Option der Tauschtextur hinzugefügt. Auf die Logik selbst hat die Farbänderung keine Auswirkung.

vor 19 Stunden schrieb Andy:

Mein Vorschlag zum Seelenheil: da man das Speichern gewohnheitsmäßig viel zu schnell 'abklatscht', würde ich bitten, dass von der derzeitigen Anlage ein .bak erstellt wird.

Eine Art History für Anlagen gibt es schon länger auf meiner ToDo-Liste, irgendwann wird sie kommen :)

vor 17 Stunden schrieb EASY:

wie kann ich eine Objektvatiable vom Typ "Objekt" mit Lua löschen?

Das geht leider nicht per Skript, weil das Studio bei nil nicht unterscheiden kann, ob eine leere Referenz gemeint ist, oder das Löschen der Variable. Das Ergebnis ist zwar in beiden Fällen das gleiche, allerdings werden in der neuen EV häufig Variablen für das Speichern von dynamischen Objektverbindungen genutzt, und wenn diese gelöscht werden, könnte das die Übersicht verschlechtern, weil der Nutzer dann nicht mehr weiß, ob er die Variable vergessen hat anzulegen, oder ob sie einfach nur leer ist.

vor 17 Stunden schrieb EASY:

Da Objektvariablen leider kein Array(Feld) sein können

Das wird aber nicht ewig so sein, sobald die wichtigsten Punkte noch abgearbeitet sind, plane ich auch die Unterstützung von Listen und Tabellen in Variablen.

vor 5 Stunden schrieb Andy:

Außerdem wäre es sehr schön, wenn man hier einen Timer oder eine Variable in ein Modul rüberziehen könnte.

Variablen kannst du bequem per Copy&Paste kopieren/verschieben. Bei den Timern würde ich eher empfehlen, diese durch verzögerte Aktionen abzubilden, wenn man schon dabei ist, eine V4-EV aufzuräumen. In den meisten Fällen wurden Timer früher nur dazu genutzt, Aktionen einmalig/sporadisch zu verzögern.

Viele Grüße,

Neo

Link zu diesem Kommentar
Auf anderen Seiten teilen

Habe noch einen Wunsch, der mir fürchterlich in den Fingern juckt:

Beim Lua-Editor komme ich gerade noch damit klar, dass der Cursor nach dem letzten Buchstaben in einer Zeile nicht in die nächste geht (das ist schon ungewohnt schlimm),
aber er sollte beim Abwärtslaufen wenigstens unter die letzte Zeile gehen. Wenn man da mal schnell was markiert, nimmt er die letzte Zeile nie mit.
Schau bitte, bitte mal, ob da was möglich ist - wenn die anderen das auch so möchten.

Gruß
  Andy

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto besitzen, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen.

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...