Einleitung | Warum | Missionen | Tutorial | FIP
|
|
Beispiel Flug ausbauen (Teil1)
Herzlich willkommen zum 1.Teil dieser Beispiel-Flug-Erweiterung. Eigentlich kannst du mit der bisherigen Einführung problemlos deine erste kleine Mission basteln. Weil ich mir alles selber beigebracht habe, war ich bei einigen Problemen wochenlang auf der Suche nach einer Lösung. Zuerst eine grundsätzliche Erklärung zu Missionen: Das war für mich als Anfänger im Missions-Erstellen damals schwer zu verstehen. Ich habe versucht, vorhandene Missionen zu analysieren, um den "Startpunkt" dieser Mission zu ermitteln. Fazit: Es gibt keinen klar definierten Startpunkt, wie bei einem Buch, welches auf Seite 1 beginnt. Ein fest definiertes Missions-Ende ist übrigens nur dann vorhanden, wenn Goals in der Mission vorhanden sind. Sobald alle Goals als "erfüllt" gewertet wurden, poppt ein Fenster auf, mit Text "Mission erfüllt". Um weitere Funktionen im SimDirector zu erklären, erweitern wir den Beispielflug. Gehen wir davon aus, dass die Maule schon sehr alt ist und viele tausend Flugstunden auf dem Buckel hat. Darum muss der Motor schonend behandelt werden. Bauen wir das also in die Mission ein. Öffne den SimDirector und lade den ExampleFlight. Für bessere Übersicht erzeugen wir eine neue Gruppe. Schalte die Hauptanzeige um auf "Visualization" und ziehe einen Rahmen um die im Bild gezeigten 5 Objekte (oder klicke die Objekte mit gedrückt gehaltener "ctrl-Taste" einzen an). Rechtsklick, Group (5) / New Group auswählen. Benenne die neue Gruppe "TimerFailure". Verlasse durch klick auf "Grouped Graph" die Gruppe und du siehst, die Übersicht ist noch aufgeräumter. Öffne wieder die Gruppe "TimerAusfall", in dem du das Symbol unten links bei der Gruppe anklickst (roter Kreis). Die jetzt vorhandene DelayAction (4,5min. bis OilLeack) ist für die geplante Erweiterung nicht geeignet, denn die Action läuft, sobald sie einmal aktiviert ist, die eingestellten 270 Sekunden ab und startet das Öl-Leck. Ein Stoppen ist nicht möglich. Also benötigen wir stattdessen einen TimeTrigger. Suche im Catalog unter Triggers den "TimeTrigger" und ziehe ihn ins Visualisations-Fenster. Wenn du dich fragst, warum ich nicht von Anfang an einen TimeTrigger verwendet habe: Doch nun weiter, mit dem TimeTrigger: Benenne den Trigger "4,5min. to OilLeak". Stelle bei "StartTime" 270 und bei StopTime" 0 ein. Schalte "OnScreenTimer" auf YES, so kannst du beim Testflug kontrollieren, ob der Timer macht, was geplant ist. Bei "Activated" ganz unten schalte um auf NO, der Trigger bekommt einen roten Punkt. Als Nächstes wird ein "PropertyTrigger" benötigt. Wie gewohnt im Catalog unter Triggers suchen und ins Visualisations-Fenster ziehen. Ein PropertyTrigger kann unterschiedlichste Dinge auswerten, z.b. die Geschwindigkeit, die Flughöhe, oder Klappenstellung des Flugzeuges. In diesem Falle werden wir die RPM des Propellers auswerten und überwachen. Benenne den Trigger bei Object Name ">2400RPM". Bei Activated schalte um auf NO. Jetzt muss eine Logik erstellt werden, klick dazu auf "EDIT LOGIC". Der Hauptbereich hat nun eine neue Lasche "Conditional Logic". Klick auf "Create Logical Expression Tree". Klick mit der rechten Maustaste auf das neu entstandene "And" und wähle im Menü "Change Typ" den Punkt "Greater Than" (rotes Rechteck). Unter "Greater Than" sind 2 neue Objekte entstanden, welche mit Werten gefüllt werden müssen. Klick mit rechter Maustaste auf das linke Objekt und wähle im Menü "Change Type" den Punkt "Property" (rotes Rechteck). Rechts musst du bei Property Name "PROP RPM" auswählen. Die Liste ist irre lang, darum: "1" bedeutet, die RPM vom Motor 1 wird ausgewertet, bei mehrmotorigen Maschinen kann, mit Index 1-4, die RPM jedes einzelnen Motors ausgewertet werden. Als Nächstes muss der Vergleichswert eingegeben werden: Klick mit linker Maustaste das Objekt "Constant" an und gib bei Value "2450" ein. (Weil bei der Maule die RPM-Anzeige nur ungefähr abgelesen werden kann, gebe ich 50RPM Toleranz hinzu.) TimeTrigger und PropertyTrigger müssen jetzt verknüpft werden. Es wird eine ObjectActivationAction benötigt. Du kannst diese im Catalog unter Actions suchen, oder schlicht die vorhandene Action mit Namen "LeakText on" im Visualisations-Fenster duplizieren. Benenne die Action ">2400RPM on", NewObjectState muss auf ACTIVATE gestellt sein, bringe unter ObjectReferenceList den Trigger ">2400RPM" in das Feld "Referenced". Dupliziere die ObjectActivationAction "LeakText on" und benenne das Duplikat "Timer OilLeak on". NewObjectState steht auf ACTIVATE, bringe nun den Trigger "4,5min. to OilLeack", unter ObjectReferenceList ins Feld "Referenced". Klicke den PropertyTrigger ">2400RPM" an und bringe unter Actions die ObjectActivationAction "Timer OilLeak on" ins Feld Referenced. Bei OneShot stellst du um auf NO, das bedeutet, der Trigger kann mehrfach auslösen (roter Rahmen). Die 4 neuen Objekte müssen noch in die Mission eingebunden werden: Klick auf "StartTimer" und bringe unter OnEnterActions die ObjectActivationAction Namens ">2400RPM on" in das Feld Referenced. Klicke den TimeTrigger namens "4,5min. to OilLeack" an und bringe unter Actions die FailureAction namens "OilLeak" in das Feld Referenced. Als Letztes muss noch die DelayAction namens "4,5min. bis Öl-Leck" entfernt werden. Mit linker Maustaste anklicken, dann mit rechter Maustaste klicken und im Menü Delete wählen. Mission speichern, wenn alles richtig gemacht wurde, ist bei Validation Output kein Fehler mehr gelistet. Nun probieren wir eine weitere Funktion des SimDirector: "Preview Scenario" Anstatt den SimDirector beenden, Flug im Prepar3D starten und testen, dabei nicht wissen, warum eine Funktion nicht funktioniert, testen wir gleich im SimDirector. Das hat den Vorteil, dass man nebenbei beobachten kann, wann welche Action, ausgelöst wird und im Falle des ">2400RPM"-Trigger kann man in der Logic genau sehen, welche RPM-Werte aktuell gemessen werden. Vorher solltest du aber unbedingt speichern. Der P3d stürzt zwar äusserst selten ab, aber genau bei dieser "Preview Scenario"-Funktion, kann es durchaus zu einem Programmabsturz kommen. 1) Klicke im oberen Menü-Band auf "Mode". Da wir hauptsächlich sehen wollen, was der PropertyTrigger ">2400RPM" auswertet, muss die "Conditional Logic neben dem Prepar3D Fenster sichtbar sein. Ziehe also mit gedrückt gehaltener Maustaste die Prepar3D-Laschein den Hauptbereich. Du siehst jetzt die Auswertung des Triggers: Links dein Flugzeug mit aktuell gemessenen Propeller RPM, rechts bei Constant der eingestellte Wert. Darüber die Auswertung "Greater Than" mit dem Wert "False" (also falsch, bzw. weniger als 2450RPM). Klick in das Prepar3D-Fenster und betätige "P", um den Pausemodus zu deaktivieren. Alternativ kannst du auch die Steuerelemente ganz oben rechts verwenden (Play, Simulationsrate ändern, mit den Doppelpfeilen kannst du die Simulation neu starten). Gib vollen Schub, die RPM werden hochgehen auf 2700RPM und bei "GreaterThan" wird "False" in "True" wechseln. Der Trigger wertet also korrekt aus und wird den Timer für das Öl-Leck aktivieren. Wechsle zum Bearbeitungsmodus, mit Klick auf "Mode", Sim Editor". Der ganze Aufwand, welcher hier betrieben wurde, bringt im Flug das gleiche Ergebnis, wie vorher, mit der DelayAction. Wie gewohnt: Wer diese Anleitung nicht selber nachbauen will, kann dieses zip herunterladen und die darin enthaltenen Files in sein Speicherverzeichnis kopieren, um das Ergebnis zu sehen. |
|
Weiter mit Teil2: Beispiel Flug ausbauen (Teil2)
|
|
Ich hoffe, euch machen diese Flüge Spass, wenn ja, gebt doch bitte eine Rückmeldung an p3d@andi20.ch. Auch Fehlermeldungen (Schreibfehler, falsche Angaben, usw.) an mich senden, ich freue mich über jede Rückmeldung. |
|
Einführung | FlugErstellen | MissionErstellen | MissionErweitern | MissionVollenden ||||| MissionAusbauen 1 | 2 | 3 | 4 | 5 | 6 |
Einleitung | Warum | Missionen | Tutorial | FIP