Nachdem wir in der letzten Lektion gelernt haben, wie ein Hotspot erstellt wird und wie er funktioniert, machen wir jetzt gleich mit Objekten weiter.
So. Letztes Mal haben wir (falls wir uns an das Tutorial gehalten haben), einen Hotspot für eine zusätzliche Schublade erstellt.
Das einzige Problem: Wir konnten sie noch nicht öffnen.
Das lernen wir heute.
Wie wir wissen, ist der Hotspot, den wir eingezeichnet haben (eine Schublade), einfach auf dem bloßen Hintergrundbild. Auf dem Hintergrundbild ist aber die Schublade nur im geschlossenen Zustand dargestellt. Um sie zu öffnen, brauchen wir aber ein Bild von ihr im offenem Zustand.
Dafür gibt es Objekte.
Ein Objekt ist praktisch ein zusätzliches kleines Bild, das vor dem normalen Hintergrund angezeigt wird. Außerdem kann man es auch so einsetzen wie ein Hotspot, das heißt: Man kann es anklicken und mit ihm interagieren. Aber das Beste an ihm ist natürlich: Man kann es aus- und einblenden.
Schauen wir uns aber erst einmal die Objekt-Übersicht unseres Raumes an:
Wie wir sehen, können wir wieder durch die verschiedenen Objekte wechseln, indem wir auf die Schaltflächen neben "Editing object:" klicken. Das jeweilige Bild wird dann daneben angezeigt.
Nach einer Weile werdet ihr wohl bemerken, dass bei manchen Objekten ein Haken bei "Object is initially visible" gesetzt ist und bei manchen nicht. Der Haken steht einfach dafür, ob das Objekt von Anfang an angezeigt werden soll oder ob es erst "angeschaltet" werden muss.
Gehen wir zur Tat über. Wir erstellen nun ein neues Objekt... mit dem Bild einer offenen Schublade (damit wir die Schublade in Zukunft öffnen können).
Dafür klicken wir einfach auf die Schaltfläche "New object", klicken dann irgendwo in unseren Raum und schon erscheint neues Objekt. Eine... Tasse, um genau zu sein.
Wir wollen aber keine Tasse, sondern eine Schublade.
Deshalb klicken wir auf die Schaltfläche "Change image..." (direkt unter dem Bildchen neben den Schaltflächen).
Daraufhin landen wir im sog. "Sprite Manager". Hier sind alle Bilder enthalten, die irgendwo im Spiel verwendet werden (ausgenommen der Hintergrundbilder der Räume). Jetzt müssen wir nur noch das richtige Bild finden. Nehmen wir einfach eines der bereits vorliegenden Schubladenbilder. Es befindet sich unter "Sprites" (Bilder) -> Room1 (Raum 1, also: Bernards Zimmer).
(Siehe Bild. )
Wenn das Objekt das passende Bild hat, müssen wir es nur noch an die richtige Stelle verschieben und es ist bereit zum Einsatz.
Naja... Erst fast. Wir müssen noch sichergehen, dass es auch in der richtigen Reihenfolge angezeigt wird, also möglichst hinter der Schublade, die darüber ist.
Dafür wählen wir das Objekt darüber an, klicken auf die Schaltfläche "Set Baseline" und klicken irgendwo in den oberen Rand des Raumes. Es müsste eine Horizontale Linie erscheinen. Dann klicken wir "Set Baseline" nochmal an.
Das gleiche machen wir nun mit unserem neu erstellten Objekt. Nur müssen wir jetzt darauf achten, dass wir die Linie möglichst über die bereits gesetzte Linie des anderen Objektes setzen.
Warum das? Nun, die Linie bestimmt eben die Reihenfolge, in der die Objekte übereinander liegen. Je weiter oben die Linie des jeweiligen Objektes ist, desto weiter hinten wird es angezeigt.
Jetzt geben wir unserem Objekt noch einen Namen (wir schreiben ihn in das Feld namens "Name" ).
Und wir wählen abschließend aus, dass es am Anfang noch nicht angezeigt wird (das Kästchen "Object ist initially visible" darf nicht markiert sein).
Damit ist unser Objekt so weit fertig. Damit es benutzbar ist, solltet ihr ein Handlungsscript im Interaction Editor des Objektes unter "Any click on object" erstellen (Genau wie beim Hotspot... Am besten, ihr kopiert einfach das eures Schubladenhotspots und passt die Koordinaten und die Sätze an.
Das sieht dann ungefähr so aus:
if (any_click_move (120, 130, DIR_UP)) {
if (UsedAction (A_PICK_UP)) {
player.Say ("Ich will keine Schublade mit mir herum schleppen.");
}
else if (UsedAction (A_LOOK_AT)) {
player.Say ("Leer.");
}
else Unhandled ();
}
So. Jetzt haben wir eine funktionierende offene Schublade... und von der letzten Lektion haben wir noch eine funktionierende geschlossene Schublade.
Jetzt müssen wir sie nur noch verbinden.
... Wenn man also die geschlossene Schublade öffnet, soll natürlich die geöffnete Schublade erscheinen. Und wenn man die geöffnete Schublade schließt, soll die geöffnete Schublade wieder verschwinden und die geschlossene Schublade erscheinen.
Das ganze erreichen wir, indem wir das Schubladenobjekt einfach sichtbar und unsichtbar machen.
Also: am Anfang des Spiels ist das Objekt ja noch unsichtbar (weil wir kein Haken bei "object is initially visible" gesetzt haben) und nur die geschlossene Schublade ist zu sehen.
Um das Objekt (die offene Schublade) dann anzuzeigen, sobald die Schublade geöffnet wird, müssen wir das in die Handlungsroutine des Hotspots unter "Öffne..." hineinschreiben.
Das komplette Hotspotscript sieht dann ungefähr so aus:
if (any_click_move (120, 130, DIR_UP)) {
if (UsedAction (A_OPEN)) {
hotspot[12].Enabled = false;
object[6].Visible = true;
PlaySound (1);
}
else if (UsedAction (A_LOOK_AT)) {
player.Say ("Nur eine weitere Schublade.");
player.Say ("Sie ist geschlossen.");
}
else Unhandled ();
}
Und das ist der neue Teil:
if (UsedAction (A_OPEN)) {
object[6].Visible = true;
hotspot[12].Enabled = false;
PlaySound (1);
}
Dass es sich um das Öffne-Script handelt, könnten wir bereits verstehen.
Aber dann sind da noch diese 3 neuen Befehle...
Erster Befehl:
object[6].Visible = true;
Genau genommen handelt es sich hier gar nicht wirklich um einen Befehl. Es ist eher eine Eigenschaft.
Aber was für eine Eigenschaft?
object |
Es handelt sich um die Eigenschaft eines Objektes... |
[6] |
...des Objektes Nummer 6, also unseres Objektes... (Die Nummer steht neben dem "Editing object:") |
.Visible |
Und zwar ist es die Eigenschaft des Objektes, ob er sichtbar ist oder nicht. |
= true |
Diese Eigenschaft setzen wir jetzt auf "wahr", was bewirkt, dass nun das Objekt angezeigt wird. |
Also haben wir damit einfach das Objekt... angeschaltet, also sichtbar gemacht.
Zweite... äh... Eigenschaft:
hotspot[12].Enabled == false
hotspot |
Es handelt sich um die Eigenschaft eines Hotspots... |
[12] |
...des Hotspots Nummer 12, also unseres Hotspots. (Die Nummer steht neben dem "Editing hotspot:") |
.Enabled |
Und zwar ist es die Eigenschaft des Hotspots, ob er "Erlaubt", also anklickbar ist oder nicht. |
= false |
Diese Eigenschaft setzen wir jetzt auf "falsch", was bewirkt, dass man den Hotspot der geschlossenen Schublade nicht mehr anklicken kann. |
Aber warum machen wir das?
Der Hotspot ist für die geschlossene Schublade. Der Spieler soll nun aber nur noch mit dem Objekt, das die offene Schublade dar stellt, interagieren können. Würden wir den Hotspot angeschaltet lassen, könnte es allerdings passieren, dass der Spieler versehentlich statt das Objekt (das die geöffnete Schublade dar stellt) den Hotspot (der für die geschlossene Schublade steht) anklickt. Um das zu verhindern... schalten wir den Hotspot gleich ganz ab.
Dritter Befehl:
PlaySound (1);
Der Befehl ist relativ leicht zu erklären. Er spielt den Ton mit der entsprechenden Nummer ab. Eine Schublade in MMM lässt sich nun mal nicht geräuschlos öffnen.
(Der Ton Nummer 1 ist so ein typisch quietschender Ton...)
Die Töne befinden sich alle im Unterordner namens "Sound" eures Spiels und haben Namen nach dem Schema "Sound9"...
Hört euch die Sound vielleicht einfach alle mal an, schreibt euch evtl. eine Liste, welcher Sound welche Nummer hat, dann erleichtert ihr euch vieles.
So weit, so gut. Jetzt müsste die offene Schublade erscheinen, wenn man die geschlossene Schublade öffnet.
(Ihr könnt es ruhig mal testen - STRG + T)
...aber es geht eben nur in die eine Richtung. Wir wollen die Schublade ja auch wieder schließen können. Deshalb schreiben wir jetzt beim Schließe-Script des Schubladen-Objektes (das wir schließlich schließen wollen) folgendes rein:
if (UsedAction (A_CLOSE)) {
hotspot[3].Enabled = true;
object[3].Visible = false;
PlaySound(1);
}
Hm. Dazu muss ich eigentlich nicht mehr viel erklären. Hier wird der ganze Vorgang umgekehrt.
Erst wird der Hotspot wieder "erlaubt", also aktiviert, dann wird das Objekt unsichtbar gemacht und schließlich wird noch der quietschende Ton abgespielt, der zum Schließen genauso gut wie zum Öffnen passt.
Damit haben wir eine voll funktionsfähige Schublade!
Und wir verstehen den Aufbau der meisten Scripte!
Und wir haben ein paar neue Befehle (oder Eigenschaften) kennen gelernt!
Und wir haben schon mal den Sprite Manager gesehen!
Und wir haben jetzt schon in allen drei Bereichen eines Raumes gearbeitet (Settings, Areas, Objects)!
Na gut. Das wars. In der nächsten Lektion kommen... Dialoge dran.