-
Held
Achtung, das ganze setzt voraus, dass du weißt wie Pointer im Maker funktionieren, sprich, wie du Variablen anhand ihrer ID über andere Variablen aufrufst.
Vorüberlegungen
- Wir wollen, dass unsere Textbox die Zeichen nach und nach einblendet und nicht schlagartig alle auf einmal anzeigt.
- Unsere Textbox hat 4 Zeilen á 40 Zeichen
- Wir arbeiten mit einer Spritefont, sprich, alle Zeichen sind auf einem Picture und jedes hat seine eigene Zelle
- Um die Abfragen möglichst leicht zu machen und das alles möglichst transparent zu gestalten ordnen wir diese entsprechend ihrer ASCII-Codes an. Wir fangen bei 32 an, da alles davor für uns irrelevant ist. D.h. auch, dass das Leerzeichen die erste Zelle bekommt.
- Wir gehen davon aus, dass ein Zeichen - Zeilen- und Zeichenabstand miteingeschlossen - 6px breit und 12px hoch ist.
Der grobe Ablauf
1. Der Spieler spricht ein Event an, welches den Inhalt der Textbox enthält (also den text, der angezeigt werden soll). Dieses Event ruft dann ein Common Event Show Textbox auf, dass alles weitere erledigt.
2. Show Textbox bestimmt erst einmal die Default-Einstellungen, sprich die Variablen, die immer gleich sind - das ist sowas wie Zeichenabmessungen, Zeilenhöhe, maximale Zeichen pro Zeile, Onset-Koordinaten (also die Stelle, an dem der Text losgeht), Pic-ID des ersten Pictures, das mit der Textbox zu tun hat, etc. Auch legen wir hier fest, welche Variablen unseren Text später enthalten sollen - sagen wir mal ab 8001. Für unsere Testzwecke bestimmt es auch die Einstellungen, die der Spieler vornehmen soll, sprich die Textgeschwindigkeit. Das CE zeigt dann die leere Textbox an und ruft seinerseits ein CE Custom Text System auf, bevor es sämtliche Pictures, die mit der Textbox zu tun haben, löscht.
3. Custom Text System kümmert sich jetzt um den eigentlichen Ablauf: Wir starten eine Schleife, in der das Script nach und nach alle Variablen ab 8001 durchgeht. Wenn die Variable > 0 ist enthält sie offenbar eine Zahl, die für ein Zeichen steht das angezeigt werden soll - in diesem Fall wird der Inhalt der Variable in einer zweiten Variable "Cel ID" gespeichert und ein CE Draw Text aufgerufen. Dabei zählen wir mit, wie oft wir Text angezeigt haben, sprich nach diesem CE setzen wir eine Variable +1 und fragen ab, wie groß diese ist: Ist sie 41, 81 oder 121 ist unsere Zeile voll und wir müssen X wieder auf den Ausgangswert setzen und Y + Zeichenhöhe rechnen. Ansonsten rechnen wir einfach X + Zeichenbreite.
Ist die Variable, die wir für die Schleife abfragen, 0, ist der Text zuende und wir sind fertig. Dann machen wir ein "wait until Key is pressed", damit die Textbox auch bleibt, bis der Spieler sie wegdrückt und gut is'.
4. Draw Text nimmt die Variable "Cel ID" und rechnet sie entsprechend unserer Spritefont um. Wenn wir uns an die ASCII-Codes halten und die erste Zelle ein Leerzeichen ist, entspräche der ASCII-Code 32 also der Zelle 1, 33 der Zelle 2, usw. Wir subtrahieren also 31. Dann zeigen wir anhand der Pic-ID, die wir vorher in 2. in einer Variable festgelegt haben, unsere Spritefont an, geben die Zelle mit der Variable "Cel ID" an und die Koordinaten ebenfalls über die in 2. angegebenen Variablen. Ans Ende kommt ein Wait von 0.0, damit nach jedem Zeichen eine kleine Pause kommt und nicht alles auf einmal gezeichnet wird.
Das ist im Grunde alles. Man kann jetzt aber natürlich auch abfragen, welches Zeichen gerade gemalt wurde - bspw. indem man nach dem Draw Text-CE in 3. schaut, welchen Wert die Variable "Cel ID" hat. So kann man bspw. mit "if V[Cel ID] = 15" schauen, ob das gerade gezeigte Zeichen ein Punkt ist und, falls ja, ein "wait until key is pressed" setzen. So wird der Text dann Satz für Satz angezeigt und der Spieler muss wenn ein Satz mit einem Punkt beendet wurde erst eine Taste drücken, ehe es weiter geht. Ähnlich kann man so auch Ausrufezeichen, Fragezeichen, etc. abfragen, aber auch Werte wie 999, die offensichtlich kein Zeichen sind, die man aber bspw. für Farbeffekte oder Gott weiß was nutzen kann - quasi das Äquivalent zu dem \c[0] des Message-Systems des Makers.
Auch kann man anstatt des Waits in 4. eine Abfrage machen, die sich eine Variable "Msg speed" anschaut und entsprechend lang wartet. So könnte man die Textgeschwindigkeit bspw. vom Spieler in den Optionen bestimmen lassen.
Aber wie gebe ich jetzt eine Nachricht ein?
Zwei Möglichkeiten: Von Hand oder automatisiert. Von Hand müsstest du jeden Buchstaben einzeln in ASCII-Code umwandeln und nach und nach in eine Variable einspeisen. Du kannst aber auch mit Cherrys RM Event factory eine Excel-Tabelle auslesen, den Text automatisch Zeichen für Zeichen konvertieren und das dann in ner Variable speichern. Das ist dann tatsächlich nicht viel Mehraufwand im Vergleich zu der normalen Textbox, bloß Text im Nachhinein ändern ist frickelig. Du kannst dir ja mal anschauen, wie ich das gelöst habe, allerdings setzt das voraus, dass du dich vorher ein wenig in RM Event Factory einarbeitest.
Gibt es das auch als Maker-Code?
Jep, aber ich hab jetzt bloß gescreenshotted, was ich gemacht habe. Da sind aber noch ein paar Zusatzfunktionen drin, nicht wundern.
CE Voreinstellungen
CE Call Textbox
CE Custom Msg System
CE Show text
CE Msg Speed
CE Skip Function (setzt Msg Speed bei drücken einer bestimmten Taste automatisch auf 0)
CE Orthography (das mit der automatischen Bestimmung von Satzenden, etc.)
CE Font color (prüft ob die Farbe geändert werden soll, tut momentan aber noch nichts)
Geändert von BDraw (23.10.2017 um 14:05 Uhr)
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln