Willkommen zu meinem Telefon-Tutorial!
Ihr seid nun also mitten in der Arbeit an einer eurer Episoden, als ihr plötzlich merkt: Mist - Ich kann ja gar kein Telefon programmieren!
...und was ist, wenn ich nun einen Safe mit Wahlfeld einbauen will? Der geht schließlich fast genau so.
Kein Problem. Nun bin ja ich da. Ab jetzt steht hier eine Anleitung, wie es geht.
Es ist eigentlich ziemlich leicht. Ein Telefon zu programmieren ist wirklich fast so einfach, wie zwei Nummern miteinander zu vergleichen.
Nun gut. Was brauchen wir als Erstes?
Richtig. Eine Benutzeroberfläche (Tasten.). Dafür erstellen wir einfach einen neuen Raum, den wir "Telefon" (oder "Safe") nennen und stellen ein Wahlfeld als Hintergrundbild rein. So eines wie... das hier:
Damit haben wir schon mal gute Voraussetzungen für ein gelungenes Telefon.
Dann müssen wir irgendwie die Tasten anklickbar machen. Ihr könnt euch entscheiden, wie ihr es macht. Entweder erstellt ihr einfach Hotspots über den Tasten (die einfachere Methode) oder ihr erstellt für jede Taste ein Objekt (praktisch, falls ihr die Tasten im gedrückten Zustand anzeigen wollt).
...damit haben wir ja schon die Hälfte der Arbeit erledigt. Fehlt nur noch die Programmiererei.
Dafür öffnen wir nun das Room Script (Der Knopf, der unter "Settings" zwei geschweifte Klammern zeigt...).
Das erste, das wie nun machen ist: Wir definieren einen String. Jupp, wir werden die Zahlen in diesem Telefon in der Form eines Strings speichern, nicht als int.
String Zahl;
Damit der String auch tatsächlich beschreibbar werden kann, erstellen wir ein Run-Script bei "player enters room (before fadein)", in dem wir dem String einen Leeren Wert zuweisen. Andernfalls gibt es eine Fehlermeldung beim zugreifen auf den String.
Zahl = "";
Nun gehen wir wieder zurück an den Anfang des Scripts, da wo "String Zahl;" steht. Da drunter erstellen wir nun eine neue Funktion. Nennen wir sie "waehle".
function waehle (int Nummer) {
}
So. Das wird die Funktion, die wir nun jedesmal aufrufen werden, wenn eine Taste gedrückt wird.
OK... Dann fügen rufen wir jetzt diese Funktion von jeder Taste aus auf.
Wir schreiben überall unter "any click on hotspot/object":
waehle (*hier die Nummer der jew. Taste*);
Perfekt. Nun ist die Funktion mit den Tasten verknüpft. Wir müssen nur noch hin schreiben, was zu tun ist.
OK... Also... was muss als allererstes passieren, wenn eine Ziffer gewählt wird?
Sie muss zu den davor gewählten Ziffern hinzugefügt werden, um eine komplette Zahl zu bilden. Also angenommen, es wurde bereits eine 1 gewählt, und nun wird eine 4 gewählt, dann muss die 4 an die 1 angehängt werden, um 14 zu ergeben. Wurde davor nichts gewählt, wird die 4 einfach ans nichts angehängt... was 4 ergibt.
Nichts leichter als das. Wir schreiben in die Funktion "waehle"
waehle (int Nummer) {
Zahl = Zahl.Append (String.Format ("%d", Nummer));
}
Was wurde gemacht? Ganz einfach. Der Text, der als String unter dem Namen Zahl gespeichert wurde, wird nun durch einen neuen Text ersetzt. Dieser neue Text setzt sich aus dem alten Text, der unter Zahl gespeichert war, und der Nummer, die gewählt wurde (und dann durch die Funktion String.Format in Textform gebracht wurde) zusammen.
Praktisch gesehen ist also nichts weiter passiert, als dass die gewählte Nummer hinten an die bereits gewählte Nummer angefügt wurde.
Als nächstes überprüfen wir, ob die "Zahl" mit einer unserer Nummern übereinstimmt... oder ob sie falsch ist und die maximale Länge, die eine Nummer haben kann, erreicht hat.
Wir schreiben einfach das hier unter den vorigen Codeabschnitt:
if (Zahl == "0000"){
//Was passieren soll, wenn 0000 eingegeben wurde
}
else if (Zahl.Length == 4) {
//Was passieren soll, wenn eine falsche Nummer eingegeben wurde und die Nummer die maximale Länge erreicht hat
}
Das war eigentlich auch schon alles...
Die ganze Wählfunktion sieht dann also so aus:
function waehle (int Nummer) {
Zahl = Zahl.Append (String.Format ("%d", Nummer));
if (Zahl == "0000"){
//Was passieren soll, wenn 0000 eingegeben wurde
}
else if (Zahl.Length == 4) {
//Was passieren soll, wenn eine falsche Nummer eingegeben wurde und die Nummer die maximale Länge erreicht hat
}
}
Das einzige Problem ist nun... Man sieht nicht die aktuell gewählte Zahl. Das lässt sich leicht beheben. Wir erschaffen einfach ein Textoverlay (Also eine dauerhaft angezeigte Schrift auf dem Bildschirm), in der der aktuelle Text von Zahl angezeigt wird. Damit sieht die ganze Funktion wie folgt aus:
String Zahl;
Overlay* Zahlstatus;
function waehle (int Nummer) {
Zahl = Zahl.Append (String.Format ("%d", Nummer));
Zahlstatus.SetText (200, 1, 7, "%s", Zahl);
if (Zahl == "0000"){
Display ("RICHTIG!");
Wait (60);
PlaySound (99);
}
else if (Zahl.Length == 4) {
Zahl = "";
}
}
function room_a() {
// script for Room: Player enters room (before fadein)
Zahl = "";
Zahlstatus = Overlay.CreateTextual (40, 130, 200, 1, 7, "");
}
...oder so ähnlich. ^^