S
t
a
r
t
Tagebuch
Tagebuch
egg-O-shOOter herunterladen
Herunterladen
Wie funktioniert egg-O-shOOter ?
Einblick
Häufig gestellte Fragen
Fragen?
egg-O-shOOter Futter
Futter
Links
Verweise
I
m
p
r
e
s
s
u
m
Click here for the english version.

In dieser Rubrik könnt ihr die Umgestaltung des egg-O-shOOters nach euren eigenen Vorstellungen erlernen.
<<<     Was passiert dann     >>>

Die Fliege fliegt und wir können sie in der Küche herumtreiben. Wie kann nun aber ein Treffer ein Ereignis auslösen, das andere Objekte beeinflusst?
Definieren wir uns in diesem Kapitel zunächst ein zweites Object. Kopiert dazu den Textblock von Objekt Nummer 1 und fügt ihn direkt darunter wieder ein. Ändert ObjectNumber auf den Wert 2 (damit wir wirklich ein zweites Objekt definieren) und setzt ObjectStartActive auf den Wert 0 (damit diese 'Zweitfliege' erst später zum Einsatz kommt). Setzt weiterhin ObjectVX/YMin/Max und ObjectMovePointing auf 0. Damit sieht der zweite Block wie folgt aus:

#1#
ObjectNumber=2       #1#Fliege nach Treffer / Fly being hit
ObjectFront=1
ObjectStartActive=0
ObjectTexture=11/70,12/20
ObjectF=-1
ObjectD=-1
ObjectSecMin=-1
ObjectSecMax=-1
ObjectConnect=-1
ObjectKoordPre=-1
ObjectHitDirection=0
ObjectXMin=-100
ObjectXMax=-100
ObjectYMin=-160
ObjectYMax=-160
ObjectDMin=20
ObjectDMax=20
ObjectAMin=0
ObjectAMax=0
ObjectVXMin=0
ObjectVXMax=0
ObjectVYMin=0
ObjectVYMax=0
ObjectVRotMin=0
ObjectVRotMax=0
ObjectRotAxis=3
ObjectVGrowMin=0
ObjectVGrowMax=0
ObjectGravMin=0
ObjectGravMax=0
ObjectMoveXMin=-800
ObjectMoveXMax=+800
ObjectMoveYMin=-200
ObjectMoveYMax=+200
ObjectMoveAMin=-360
ObjectMoveAMax=+360
ObjectMoveRMin=1
ObjectMoveRMax=1000
ObjectMoveType=3
ObjectType=1
ObjectBenefitMin=*0,*0,*0,*0,*0,*0,*0,*0,*0,*0,*0,*0,*0
ObjectBenefitMax=*0,*0,*0,*0,*0,*0,*0,*0,*0,*0,*0,*0,*0
ObjectMirror=0
ObjectMovePointing=0
ObjectHitSound=
ObjectAppearSound=
ObjectHitTextEnglish=
ObjectHitTextGerman=

Diese zweite Fliege können wir aktivieren, sobald Fliege Nummer 1 getroffen wird. Diese 'Was passiert dann'-Verzweigung wird mit Hilfe der Variablen 'ObjectF' und 'ObjectD' realisiert. In ObjectD werden alle Objekte aufgelistet, die bei einem Ereignis deaktiviert werden und in ObjectF diejenigen Objekte die aktiviert werden. Neben dem Ereignis Treffer gibt es noch die Ereignisse Zeit und Bereich. Widmen wir uns zunächst dem Ereignis für einen Treffer. Objekte die bei einem Treffer aktiviert oder deaktiviert werden sollen, müssen mit einem vorangestellten H (english 'Hit') gekennzeichnet werden. Wir wollen also Fliege Nummer 1 deaktivieren und durch Fliege Nummer 2 ersetzen. Folglich werden die beiden Variablen von Object Nummer 1 (!) zu:

ObjectF=H2
ObjectD=H1

Schießt jetzt wieder auf die Fliege und beobachtet was passiert.
Wie geplant, verschwindet Fliege Nummer 1 und Fliege Nummer 2 taucht auf. Die Koordinaten von ObjectXMin/Max und ObjectYMin/Max von Fliege 2 sind identisch zu denen von Fliege 1 und somit taucht die Fliege wieder auf dem Herd auf, egal wo im egg-O-shOOter Universum ihr Fliege 1 trefft.
Realistischer wäre es, wenn Fliege Nummer 2 an der Stelle auftaucht, an der ihr Fliege Nummer 1 getroffen habt. Dazu verwenden wir die Variable ObjectKoordPre, mit deren Hilfe festgelegt wird, von welchem Object ein neu aktiviertes Objekt die aktuellen Koordinaten übernimmt. Fliege Nummer 2 soll bei ihrem Erscheinen die Koordinaten von Fliege Nummer 1 erhalten, weswegen ObjectKoordPre von Fliege 2 (!) auf 1 gesetzt wird.
Schießt nochmal auf die Fliege (abspeichern und 'N'-Taste nicht vergessen) und seht nach, ob alles wie geplant verläuft.
Offensichtlich nicht! Mit der Variablen ObjectKoordPre legt ihr lediglich fest, von welchem Objekt die Koordinaten übernommen werden sollen. Als nächsten Schritt müsst ihr jetzt noch definieren, welche Variablen wie übernommen werden sollen. Egg-O-shOOter kennt hier verschiedene Möglichkeiten:
Der Unterstrich (_) besagt, dass die Variablen von dem unter ObjectKoordPre angegebenen Objekt unverändert übernommen werden sollen. Wird kein Objekt zur Koordinatenübernahme gefunden, wird die Variable mit dem Wert hinter dem Unterstrich initialisiert (z.B. beim Spielstart).
Das Gleichheitszeichen (=) besagt, dass die Werte von ObejctKoordPre ignoriert und die Variablen neu initialisiert werden sollen.
Das 'größer als' (>) besagt, dass diese Werte zu denen von ObjectKoordPre addiert werden sollen.
Das Multiplikationszeichen (*) besagt, dass die durch ObjectKoordPre übergebenen Werte mit diesen Werten multipliziert werden.
Für unser Beispiel können wir drei der angebotenen Varianten verwenden. Entweder nehmen wir den Unterstrich, um die Werte direkt vom Vorgänger zu übernehmen oder wir nehmen das 'größer als' und addieren den Wert 0 oder wir multiplizieren die Vorgängerdaten mit 1.
Einzig unbraubar ist das Gleichheitszeichen, das die Vorgängerdaten gänzlich ignoriert und nur die neuen Werte verwendet.
Macht also aus den Zeilen der X- und Y- Koordinaten von Fliege Nummer 2 (!) die folgenden Zeilen:

ObjectXMin>-100
ObjectXMax>-100
ObjectYMin>-160
ObjectYMax>-160

Schießt nicht sofort auf die Fliege, sondern lasst diese erst ein wenig aufsteigen, damit ihr besser seht was nun passiert. Screenshot egg-O-shOOter
Wenn ihr die Fliege trefft, erscheint Fliege Nummer 2 etwas links und unterhalb von Fliege Nummer 1 - warum? Nun Fliege Nummer 2 übernimmt wie vorgesehen die Koordinaten von Fliege Nummer1, jedoch werden die Werte von ObjectXMin/Max und ObjectYMin/Max dazu addiert!
Das gibt euch die Möglichkeit, neue Objekte in einem vorbestimmten Abstand zu dem vorangegangenen Objekt auftauchen lassen zu können. Da dieses Verhalten in unserem Beispiel unerwünscht ist, müssen wir diese Variablen von Objekt Nummer 2 (!) auf 0 setzen.

ObjectXMin>0
ObjectXMax>0
ObjectYMin>0
ObjectYMax>0

Setzt ihr zusätzlich noch

ObjectAMin>0
ObjectAMax>0

und

ObjectMirror>0

so übernimmt die Fliege auch den Winkel und den Zustand 'Gespiegelt' der Vorgängerfliege und dreht sich nicht so aprupt nach links.
Jetzt taucht Fliege Nummer 2 tatsächlich an der Stelle von Fliege Nummer 1 auf und bleibt in der Luft stehen.
Sonderlich realistisch ist das Szenario immer noch nicht.
Setzt ObjectGravMin/Max auf +20 (Vorzeichen beachten, auch diese Variable ist 'bidirektional'!). Damit definiert ihr eine Schwerkraftwirkung, welche die Fliege nach unten zerrt. Nach dem Treffer bleibt die Fliege stehen und fällt dann langsam nach unten. Das entspricht nicht so ganz der physikalischen Wirklichkeit, ist mit dem Comic-Stil des egg-O-shOOters aber gut vereinbar. Doch hoppala - was passiert den da unten? Die Fliege prallt wie ein Gummiball ab und springt wieder nach oben. Das sollten wir doch noch korrigieren. Dazu genügt es, die Variable ObjectMoveType von 3 auf 5 zu ändern. Ich spreche hier von Object Nummer 2 (!), Nummer 1 ist ja deaktiviert und hat mit dem Spielverlauf nichts mehr zu tun. ObjectMoveType=3 hat bewirkt, dass die Fliege sich immer innerhalb der Grenzen von ObjectMoveXMin/Max und ObjectMoveYMin/Max bewegt hat. Der Wert 5 besagt, dass das Object anhalten soll, sobald dieser Bereich verlassen wird. Setzt ObjectMoveYMin=-150 und ihr seht, dass die Fliege knapp oberhalb der unteren Begrenzung anhält.
Spielt mit der Variablen ObjectVRotMin/Max, um die Fliege auf ihrem Weg nach unten in Rotation zu versetzen.
Solltet ihr einen realistischeren 'Abgang' der Fliege bevorzugen, wäre es doch besser, wenn die Fliege ihre X- und Y-Geschwindigkeit beibehielte und nach dem Treffer von der Schwerkraft nach unten gezogen würde. Auch für diese Version hält egg-O-shOOter eine Lösung bereit:

ObjectVXMin_0
ObjectVXMax_0
ObjectVYMin_0
ObjectVYMax_0

Damit setzt ihr ObjectVXMin/Max und ObjectVYMin/Max auf die exakt gleichen Werte wie von Fliege Nummer 1, dem Object 2 vorhergehenden Object. Die Werte hinter dem Unterstrich (_) werden ignoriert, wenn in der Variablen ObjectKoordPre ein aktives Objekt für die Koordinatenübernahme aufgelistet ist. Ohne solch einen Vorgänger initialisiert der egg-O-shOOter das Object mit den hinter dem Unterstrich stehenden Werten. Schießt erneut und ihr werdet sehen, dass die Fliege nun einer Wurfparabel folgend nach unten fällt. Wenn ihr ObjectHitDirection=0 bei Object Nummer 1 (!) setzt, wird die Fliege von eurem Treffer nicht mehr abgelenkt.
Richtig rund wird das Beispiel, wenn ihr noch eine zusätzliche Fliegengrafik zeichnet, die auch wirklich nach getroffener Fliege aussieht und dieses Bild mit ObjectTexture der Fliege Nummer 2 zuweist.
<<<Zurück zu Bewegte Objekte          Weiter zu Bereichssteuerung>>>