Instanz-Variablen
Instanz-Variablen erlauben es uns für jedes Monster eine eigene Variable für Gesundheit anzulegen. Eine Variable ist einfach ein Wert der veränderlich (variabel) ist und der für jede Instanz etra gespeichert wird, deswegen der Name Instanz-Variable.
Fügen wir eine instance variable für unser Monster hinzu. Klicken Sie auf das Monster in der Projekt- oder Objektleiste. Sie können aber auch zurück auf das Layout gehen und dort direkt ein Monster Objekt wählen. Dies wird die Eigenschaften des Monsters ind der properties Leiste anzeigen. Klicke Add/edit bei Edit variables.
Der Instanz-Varaiblen Dialog erscheint. Er sieht ähnlich wie der behavior Dialog aus, den wir schon zuvor gesehen haben, erlaubt es Ihnen aber stattdessen instance variables hinzuzufügen und zu ändern. Klicke auf den grünen Add Button um eine Neue anzulegen.
Im aufgehenden Dialog tippe als Name Gesundheit, lasse type als Number und als Initial value gib 5 ein (wie dargestellt). Dadurch startet jedes Monster mit 5 Gesundheit. Wenn Sie getroffen werden ziehen wir 1 von der Gesundheit ab und wenn die Gesundheit Null ist, dann werden wir das Objekt zerstören.
Klicke danach auf OK. Sie sehen nun, daß die Variable jetz im instance varaibles Dialog und ebenso unter den properties des Monsters aufscheint. (Sie können schnell Startwerte in der properties Leiste ändern, aber um Variablen hinzuzufügen oder zu ändern, müssen sie auf den Add / Edit Link klicken.)
Ersetzen des Events
Wechseln Sie zum event sheet. Bis jetzt zerstören wir Monstern sobald diese von einer Kugel getroffen werden. Ändern wir dies nun so um, daß 1 von dessen Gesundheit abgezogen wird.
Finden Sie das Event bei dem steht: Bullet - on collision with Monster. Beachten Sie, daß wir derezit eine "destroy monster Aktion haben. Ersetzen wir diese nun durch eine subtract 1 from Gesundheit* Aktion. Klicke mit der rechten Maustaste auf die "desroy monster" Aktion und klicke dann Replace.
Der gleiche Dialog erscheint wie schon beim Einfügen einer neuen Aktion, aber diesmal wird stattdessen die Aktion ersetzt. Wähle Monster -> Subtract from (aus der Instance variables Kategorie aus) -> Instanz-Variablen Gesundheit und gib 1 für Value ein. Klicke auf Done. Die Aktion sollte nun aussehen wir diese:
Wenn wir jetzt Monster treffen verlieren diese 1 Gesundheit und die Kugel explodiert. Wir haben aber noch kein Event daß die Monster tötet wenn deren Gesundheit Null erreicht. Füge ein neues Ereignis hinzu:
Condition: Monster -> Compare instance variable -> Health, Less or equal, 0
Action: Monster -> Spawn another object -> Explosion, layer 1
Action: Monster -> Destroy
Warum "less or equal 0" anstatt "equal 0"? Angenommen wir fügen eine neue mächtigere Waffe hinzu bei der 2 von der Gesundheit abgezogen wird. Wenn Sie dann ein Monster treffen wäre sein Gesundheitsverlauf so 5, 3, 1, -1, -3... Sie sehen, daß seine Gesundheit zu keinem Zeitpunkt direkt Null wird weswegen er nie stirbt! Deswegen ist es eine gute Vorgehensweise "less or equal" zu verwenden um festzustellen ob jemandes Gesundheit ausgeht.
Starte das Spiel. Sie müssen nun Monster fünf Mal treffen um sie zu töten!
Punkte merken
Führen wir Punkte ein, damit der Spieler weiß wie gut er war. Dazu brauchen wir eine weitere Variable. Sie überlegen vielleicht "die Punkte in einer Instanz-Variablen des Spielers zu speichern!". Das scheint auf den ersten Blick eine gute Idee zu sein, aber der Wert wird im Objekt gespeichert. Wenn es keine Instanzen mehr davon gibt, dann sind ebenso auch keine Varaiblen mehr da! Wenn wir den Spieler zerstören können wir nicht mehr länger feststellen welche Punkte er hatte, weil Diese ja mit dem Spieler zerstört wurden.
Stattdessen können wir eine globale Variable verwenden. Ähnlich einer Instanz-Varaiblen kann eine global varaible (oder einfach nur "global*) einen Text oder eine Zahl speichern. Jede Variable kann eine einzige Zahl oder einen einziges Textstück speichern.
Auf globale Variablen kann aber zusätzlich noch im ganzen Spiel über alle Layouts hinweg zugegriffen werden - praktisch falls wir weitere Level hinzufügen.
Mache einen Rechts-Klick im unteren Bereich des Events sheets und wähle Add global variable aus.
Gib als Name Punkte ein. Die voreingestellten Werte der Felder sind OK. Es wird eine Zahl mit dem Startwert 0 erzeugt.
Die global varaible erscheint nun im event sheet. Sie ist in diesem event sheet, es kann aber aus jedem event sheet in jedem layout darauf zugegrifen werden.
Achtung: Es gibt auch local Variablen auf welche nur aus einem kleinen "Bereich" von Ereignissen zugegrifen werden kann, aber damit brauchen wir uns jetzt nicht weiter zu beschäftigen.
Geben wir dem Spieler Punkte wenn er ein Monster tötet. In unserem "Monster: Gesundheit less or equal 0" Event (wenn ein Monster stirbt) klicke Add action und wähle System -> Add to (unter Global u. local variables) -> Punkte value 1 aus. Jetzt sollte das Event aussehen wir folgt (Punkte = Score):
Jetzt hat der Spieler Punkte, welche sich immer um 1 erhöhen, wenn er ein Moster tötet - aber er kann die Punkte nicht sehen! Zeigen wir sie ihm durch ein Text Objekt.