Sprechblasen?
Sprechblasen?
Hallo liebe Forenmitglieder,
eigentlich wollte ich mich nach langer Stille erst wieder melden, wenn ich mein aktuelles, kleines Projekt fertig vorlegen kann. Aber nun habe ich auf den letzten Metern doch nochmal ein kleines Problem. Es ist nicht unbedingt entscheidend für das fertige Spiel, wäre aber ganz nett zu haben.
Mehrere meiner Testspieler haben sich über die schlechte Lesbarkeit der speech-Texte vor dem cartoon-Hintergrund geäußert und ich habe nun versucht das Problem mit einer Sprechblase zu lösen.
Vermutlich ist das ohne einen enormen, unsauber gescripteten Aufwand gar nicht möglich aber ich wollte wengistens kurz mal eure Meinungen einholen, bevor ich aufgebe. Vielleicht hat ja doch jemand eine schlaue Idee.
Die Frage ist: Seht ihr einen Weg, der es ermöglicht, das Ein- und Ausblenden eines (Sprechblasen-)Objektes mit der Dauer der Sprachanzeige zu synchronisieren? Mir scheint fast als wäre das jenseits des Machbaren. Eine direkte Abfrage existiert ja wohl nicht und den Zustand des Charakters kann man soweit ich das überblicke ja auch nicht auslesen. Der einzige unmöglich-möglige Weg der mir bisher einfällt ist es, mit manuell gesetzten Bools vor jedem Speech-Befehl zu arbeiten und selbst dann müsste man noch timer setzten, die den Bool genau passend zum Ende der speech-Anzeige wieder umschalten.
Oder seht ihr das anders?
eigentlich wollte ich mich nach langer Stille erst wieder melden, wenn ich mein aktuelles, kleines Projekt fertig vorlegen kann. Aber nun habe ich auf den letzten Metern doch nochmal ein kleines Problem. Es ist nicht unbedingt entscheidend für das fertige Spiel, wäre aber ganz nett zu haben.
Mehrere meiner Testspieler haben sich über die schlechte Lesbarkeit der speech-Texte vor dem cartoon-Hintergrund geäußert und ich habe nun versucht das Problem mit einer Sprechblase zu lösen.
Vermutlich ist das ohne einen enormen, unsauber gescripteten Aufwand gar nicht möglich aber ich wollte wengistens kurz mal eure Meinungen einholen, bevor ich aufgebe. Vielleicht hat ja doch jemand eine schlaue Idee.
Die Frage ist: Seht ihr einen Weg, der es ermöglicht, das Ein- und Ausblenden eines (Sprechblasen-)Objektes mit der Dauer der Sprachanzeige zu synchronisieren? Mir scheint fast als wäre das jenseits des Machbaren. Eine direkte Abfrage existiert ja wohl nicht und den Zustand des Charakters kann man soweit ich das überblicke ja auch nicht auslesen. Der einzige unmöglich-möglige Weg der mir bisher einfällt ist es, mit manuell gesetzten Bools vor jedem Speech-Befehl zu arbeiten und selbst dann müsste man noch timer setzten, die den Bool genau passend zum Ende der speech-Anzeige wieder umschalten.
Oder seht ihr das anders?
Re: Sprechblasen?
Hi,
spontan fällt mir da etwas ein, was Du mal versuchen könntest :
wenn ich mich recht erinnere, wird beim Speech Befehl der Char solange auf die Speech Animation gesetzt, wie
das Soundfile dauert.
Wenn Du also in die gehen/stehen usw Animationen einen Bool "nospeech" z.B. an den Anfang setzt und in
der "Sprechen" Animation diesen umsetzt, kannst Du ihn dann per Mainscript abfragen.
Somit würde ein Bool beim Sprechen auf "true" gesetzt, solange wird dann eine Sprechblase eingeblendet per Funktion und wenn die Figur dann vom SPrechen wieder auf einen anderen Zustad zurückgesetzt wird, wird das
"Sprechblasenfenster" wieder geschlossen.
Das ließe sich sogar mit relativ wenig Aufwand einbauen.
Ob das aber so klappt, habe ich noch nie ausprobiert.
Gruss
Manni
spontan fällt mir da etwas ein, was Du mal versuchen könntest :
wenn ich mich recht erinnere, wird beim Speech Befehl der Char solange auf die Speech Animation gesetzt, wie
das Soundfile dauert.
Wenn Du also in die gehen/stehen usw Animationen einen Bool "nospeech" z.B. an den Anfang setzt und in
der "Sprechen" Animation diesen umsetzt, kannst Du ihn dann per Mainscript abfragen.
Somit würde ein Bool beim Sprechen auf "true" gesetzt, solange wird dann eine Sprechblase eingeblendet per Funktion und wenn die Figur dann vom SPrechen wieder auf einen anderen Zustad zurückgesetzt wird, wird das
"Sprechblasenfenster" wieder geschlossen.
Das ließe sich sogar mit relativ wenig Aufwand einbauen.
Ob das aber so klappt, habe ich noch nie ausprobiert.
Gruss
Manni
Es gibt 10 Arten von Usern :
die, die Binärcode verstehen und die, die es nicht tun....
----------------------------------------------------------
STAR TREK FYNE :
http://www.fynegames.homepage.t-online.de
die, die Binärcode verstehen und die, die es nicht tun....
----------------------------------------------------------
STAR TREK FYNE :
http://www.fynegames.homepage.t-online.de
Re: Sprechblasen?
Hey,
danke dir für die gute Idee. Das klingt genau nach dem was ich gesucht habe. Dass ein Wert für die Sprachdauer je nach länge des Textes/Soundfiles irgendwo im Hintergrund existiert und z.B. für die Animationen genutzt wird war mir bewusst aber mir ist keine Möglichkeit eingefallen den anzuzapfen.
Die Scriptzeile in den Animationsframes klingt aber super. Ich probier es gleich mal aus.
danke dir für die gute Idee. Das klingt genau nach dem was ich gesucht habe. Dass ein Wert für die Sprachdauer je nach länge des Textes/Soundfiles irgendwo im Hintergrund existiert und z.B. für die Animationen genutzt wird war mir bewusst aber mir ist keine Möglichkeit eingefallen den anzuzapfen.
Die Scriptzeile in den Animationsframes klingt aber super. Ich probier es gleich mal aus.
Re: Sprechblasen?
Viel Glück
Es gibt 10 Arten von Usern :
die, die Binärcode verstehen und die, die es nicht tun....
----------------------------------------------------------
STAR TREK FYNE :
http://www.fynegames.homepage.t-online.de
die, die Binärcode verstehen und die, die es nicht tun....
----------------------------------------------------------
STAR TREK FYNE :
http://www.fynegames.homepage.t-online.de
Re: Sprechblasen?
Hey,
ich bin doch doch doof, mensch, geht doch noch einfacher...
in die Speech Animation direkt den Befehl zum Öffnen des Fensters schreiben und in die Anderen zum Schließen.
Brauchst das Mainscript nicht dazu...
ich bin doch doch doof, mensch, geht doch noch einfacher...
in die Speech Animation direkt den Befehl zum Öffnen des Fensters schreiben und in die Anderen zum Schließen.
Brauchst das Mainscript nicht dazu...
Es gibt 10 Arten von Usern :
die, die Binärcode verstehen und die, die es nicht tun....
----------------------------------------------------------
STAR TREK FYNE :
http://www.fynegames.homepage.t-online.de
die, die Binärcode verstehen und die, die es nicht tun....
----------------------------------------------------------
STAR TREK FYNE :
http://www.fynegames.homepage.t-online.de
Re: Sprechblasen?
Ja, dass hab ich dann auch gemerkt.
In der Praxis funktioniert das ganze leider nicht ganz so gut.
Erstes Problem: Die Sprach- und Lauf-Animationen fangen immer da an wo sie zuletzt aufgehört haben. Also nicht notwendigerweise beim ersten Frame. Man muss also jeden Frame einzeln mit dem Befehl versehen, was ein ziemliches Rumgespame ist und auch jegliche anderweitige verwendung der Animationsframes blockiert.
Zweites Problem: Selbst nachdem ich jeden Frame mit dem Script versehen hatte, gab es ab und zu unschöne Verzögerungen bei der Anzeige und das sieht einfach nicht gut aus.
Ich habe jetzt anhand dieses "Prototypen" aber eh gemerkt, dass das Konzept Sprechblase nicht so gut aussieht wie ich mir das vorgestellt hatte.
Es reißt einen halt doch ganz schön aus der Spielatmosphäre, wenn da immer so ein großer, weißer Kasten aufleuchtet. Und der Text ist im Kasten nicht schön ausgerichtet und der Kasten ist teilweise viel zu groß für das bisschen text, da er alle eventellen Texte abdecken muss etc...
Also danke für die Hilfe, es ist gut das mal ausprobiert zu haben. Aber dann müssen sich die faulen Leute beim Lesen halt etwas mehr konzentrieren. Das scheint mir dann das kleinere Übel zu sein.
Grüße
Cornelis
In der Praxis funktioniert das ganze leider nicht ganz so gut.
Erstes Problem: Die Sprach- und Lauf-Animationen fangen immer da an wo sie zuletzt aufgehört haben. Also nicht notwendigerweise beim ersten Frame. Man muss also jeden Frame einzeln mit dem Befehl versehen, was ein ziemliches Rumgespame ist und auch jegliche anderweitige verwendung der Animationsframes blockiert.
Zweites Problem: Selbst nachdem ich jeden Frame mit dem Script versehen hatte, gab es ab und zu unschöne Verzögerungen bei der Anzeige und das sieht einfach nicht gut aus.
Ich habe jetzt anhand dieses "Prototypen" aber eh gemerkt, dass das Konzept Sprechblase nicht so gut aussieht wie ich mir das vorgestellt hatte.
Es reißt einen halt doch ganz schön aus der Spielatmosphäre, wenn da immer so ein großer, weißer Kasten aufleuchtet. Und der Text ist im Kasten nicht schön ausgerichtet und der Kasten ist teilweise viel zu groß für das bisschen text, da er alle eventellen Texte abdecken muss etc...
Also danke für die Hilfe, es ist gut das mal ausprobiert zu haben. Aber dann müssen sich die faulen Leute beim Lesen halt etwas mehr konzentrieren. Das scheint mir dann das kleinere Übel zu sein.
Grüße
Cornelis
Re: Sprechblasen?
Ich arbeite ja mit halbtransparenten Hintergrüden bei Textfenstern...Das geht sehr gut...
So wie hier aus meinem allerersten Projekt damals...
Hmm.Dann würde ich je drei Befehle vorne, mittig und am Ende der Animationen setzen, das müsste
bei einigermaßen zügigen Bewegungen reichen...
So wie hier aus meinem allerersten Projekt damals...
Hmm.Dann würde ich je drei Befehle vorne, mittig und am Ende der Animationen setzen, das müsste
bei einigermaßen zügigen Bewegungen reichen...
Es gibt 10 Arten von Usern :
die, die Binärcode verstehen und die, die es nicht tun....
----------------------------------------------------------
STAR TREK FYNE :
http://www.fynegames.homepage.t-online.de
die, die Binärcode verstehen und die, die es nicht tun....
----------------------------------------------------------
STAR TREK FYNE :
http://www.fynegames.homepage.t-online.de
-
- Experienced PaC-DK User
- Posts: 561
- Joined: 07 Sep 2011, 21:33
- Location: In der Ortenau
- Contact:
Re: Sprechblasen?
Offtopic: Wenn dein Spiel den gleichen Grafikstil hat, wie die Bilder auf deiner Homepage. Dann wird das verdammt gut ^^
Re: Sprechblasen?
Vielleicht würden drei Frame-Befehle tatsächlich reichen. Das ist aber schwer zu sagen, da es aus irgendwelchen anderen Gründen noch zu Verzögerungen kommt. Aber wie gesagt, ich werde jetzt einfach drauf verzichten.
Bin aber trotzdem neugierig: Wie hast du das bei dir mit den Sprachkästen gelöst? Ich meine technisch macht es doch eigentlich keinen Unterschied ob man eine Sprechblase oder einen Kasten benutzt?
@DeinTroll: Bevor die Erwartungen zu hoch schnellen: Es ist nur ein sehr kurzes Spiel und reicht vom Umfang nicht annähernd an das "NoHolidays"-Projekt heran, was ich hier vor Jahren mal angekündigt hatte. Aber grafisch dürfte es sich schon ganz gut machen. Ich werde es euch bald näher vorstellen.
Bin aber trotzdem neugierig: Wie hast du das bei dir mit den Sprachkästen gelöst? Ich meine technisch macht es doch eigentlich keinen Unterschied ob man eine Sprechblase oder einen Kasten benutzt?
@DeinTroll: Bevor die Erwartungen zu hoch schnellen: Es ist nur ein sehr kurzes Spiel und reicht vom Umfang nicht annähernd an das "NoHolidays"-Projekt heran, was ich hier vor Jahren mal angekündigt hatte. Aber grafisch dürfte es sich schon ganz gut machen. Ich werde es euch bald näher vorstellen.
Re: Sprechblasen?
ich habe kaum Speech dateien zum Abspielen, daher warte ich eine bestimmte Zeit.
Meine Texte werden alle per textout Befehl ausgegeben.
Ich habe einen Kasten als Fenster gewählt, weil ich 1. das gut fand und 2. das Vorbild auch sowas hatte.
Andere Formen sind natürlich möglich.
Um das alles zu erklären, muss ich etwas ausholen, denn da steckt reichlich dahinter...
Der Ablauf ist (beim einfachen Textfenster ) so, dass ich es mittels eines CLOSE Buttons ( Im Bild oben rechts neben dem Fenster ) schliesse. Fertig !
Wenn aber mehrere Textfenster , zB. bei Dialogen, hintereinander ablaufen sollen, geschieht Folgendes :
Aufruf beim ersten, anzuzeigendem Text (z.B. im Objekt )
setstring (txt_function;dialogues) ---> Dialogues enthält die Dialoge
setnum (txt_number;100) ---------->100 ist die gewünschte Dialognummer
setobj (txt_timerobject;2) ----------> Wartezeit, die das Fenster offen bleibt
setobj (txt_window_big;1)
setobj (txt_closewinbutton;1)
Die Funktion "dialogues" enthält alle Dialoge.
Die Nummer "txt_number" gibt an, ab wo ein Dialogablauf im Skript beginnt. ( Damit sind auch Schleifen möglich)
Der String "txt_string wird mit dem Namen des Skriptes mit dem gewünschten Dialog gefüttert.
Das Objekt "txt_timerobject" ist ein leeres Objekt im Raum "Everywhere" :
Dieses Objekt dient als Timer, der nach 30 Frames im vorvorletzten Frame die Nummer "txt_number" +1 setzt
Im vorletzten Frame wird die Funktion, die im String "txt_function" steht, aufgerufen
Im letzten Frame wird das Objekt "txt_timerobject" auf gesetzt, dann geht alles von vorne los.
Ein Sonderfall ist eben der Zustand 1 : In diesen Frames steht drin :
"setnum (txt_timer;+1)"
"function ([txt_function])
Jetzt passiert Folgendes : Die Frames laufen mit der gewünschten Zeit ab ( Zust. 2-8 unterschiedlich, je nach Bedarf ) und dann wird der Texttimer um 1 erhöht und die gewünschte Dialogfunktion wird
wieder gestartet.
Dort wird wieder geschaut, welche Dialognummer angezeigt werden soll, öffnet das Fenster, schreibt ein
hidealltext() und setzt das Timerobjekt auf die gewünschte Dauer ( Also den Zustand ) usw
Im Textfenster "txt_window_big" steht in den Fames 3+4 je ein setnum (mousex)... Befehl, damit
der Mauszeiger auf den Close Button gesetzt wird,
in den ersten beiden Frames wird die bisherige Zeigerposition in Variablen gespeichert, damit nach dem Schliessen des Fensters der Zeiger wieder an seine Ursprungspoition gesetzt wird.
In Frame 5 wird das Textfenster von Zustand 1 (Befehlszustand) auf den Zustand 2 ( Dauerzustand ) gesetzt.
Der Zustand 1 läuft mit 49 Frames ab, merkt also keiner.
Wenn ich das mal nicht brauche, dann setze ich das Fenster gleich auf Zustand 2.
Der Closebutton setzt alle Variablen und Strings zurück, das Timerobjekt auf 0 und schliesst die Fenster.
Klingt umständlich, wurde aber auch entwickelt, um Dialoge, die man kennt, einfach sofort weiterklicken
zu können, wenn man sie schon kennt.
Ansonsten wird eine angemessene Zeit gewartet ( beim grossen Textfenster hat das Timerobjekt einen
"langsameren" Zustand, als beim kleinen Fenster ) , die Dialognummer wird durch den timer erhöht und
der nächste Text erscheint.
Drücke ich bei laufendem Dialog den Close Button, setze ich damit den timer sofort hoch und rufe die Dialogfunktion auf.
Da muss dann ggf das Timerobjekt neu gesetzt werden, falls der folgende Text kürzer oder länger ist.
Das hat sich bewährt bei mir...
Meine Texte werden alle per textout Befehl ausgegeben.
Ich habe einen Kasten als Fenster gewählt, weil ich 1. das gut fand und 2. das Vorbild auch sowas hatte.
Andere Formen sind natürlich möglich.
Um das alles zu erklären, muss ich etwas ausholen, denn da steckt reichlich dahinter...
Der Ablauf ist (beim einfachen Textfenster ) so, dass ich es mittels eines CLOSE Buttons ( Im Bild oben rechts neben dem Fenster ) schliesse. Fertig !
Wenn aber mehrere Textfenster , zB. bei Dialogen, hintereinander ablaufen sollen, geschieht Folgendes :
Aufruf beim ersten, anzuzeigendem Text (z.B. im Objekt )
setstring (txt_function;dialogues) ---> Dialogues enthält die Dialoge
setnum (txt_number;100) ---------->100 ist die gewünschte Dialognummer
setobj (txt_timerobject;2) ----------> Wartezeit, die das Fenster offen bleibt
setobj (txt_window_big;1)
setobj (txt_closewinbutton;1)
Die Funktion "dialogues" enthält alle Dialoge.
Die Nummer "txt_number" gibt an, ab wo ein Dialogablauf im Skript beginnt. ( Damit sind auch Schleifen möglich)
Der String "txt_string wird mit dem Namen des Skriptes mit dem gewünschten Dialog gefüttert.
Das Objekt "txt_timerobject" ist ein leeres Objekt im Raum "Everywhere" :
Dieses Objekt dient als Timer, der nach 30 Frames im vorvorletzten Frame die Nummer "txt_number" +1 setzt
Im vorletzten Frame wird die Funktion, die im String "txt_function" steht, aufgerufen
Im letzten Frame wird das Objekt "txt_timerobject" auf gesetzt, dann geht alles von vorne los.
Ein Sonderfall ist eben der Zustand 1 : In diesen Frames steht drin :
"setnum (txt_timer;+1)"
"function ([txt_function])
Jetzt passiert Folgendes : Die Frames laufen mit der gewünschten Zeit ab ( Zust. 2-8 unterschiedlich, je nach Bedarf ) und dann wird der Texttimer um 1 erhöht und die gewünschte Dialogfunktion wird
wieder gestartet.
Dort wird wieder geschaut, welche Dialognummer angezeigt werden soll, öffnet das Fenster, schreibt ein
hidealltext() und setzt das Timerobjekt auf die gewünschte Dauer ( Also den Zustand ) usw
Im Textfenster "txt_window_big" steht in den Fames 3+4 je ein setnum (mousex)... Befehl, damit
der Mauszeiger auf den Close Button gesetzt wird,
in den ersten beiden Frames wird die bisherige Zeigerposition in Variablen gespeichert, damit nach dem Schliessen des Fensters der Zeiger wieder an seine Ursprungspoition gesetzt wird.
In Frame 5 wird das Textfenster von Zustand 1 (Befehlszustand) auf den Zustand 2 ( Dauerzustand ) gesetzt.
Der Zustand 1 läuft mit 49 Frames ab, merkt also keiner.
Wenn ich das mal nicht brauche, dann setze ich das Fenster gleich auf Zustand 2.
Der Closebutton setzt alle Variablen und Strings zurück, das Timerobjekt auf 0 und schliesst die Fenster.
Klingt umständlich, wurde aber auch entwickelt, um Dialoge, die man kennt, einfach sofort weiterklicken
zu können, wenn man sie schon kennt.
Ansonsten wird eine angemessene Zeit gewartet ( beim grossen Textfenster hat das Timerobjekt einen
"langsameren" Zustand, als beim kleinen Fenster ) , die Dialognummer wird durch den timer erhöht und
der nächste Text erscheint.
Drücke ich bei laufendem Dialog den Close Button, setze ich damit den timer sofort hoch und rufe die Dialogfunktion auf.
Da muss dann ggf das Timerobjekt neu gesetzt werden, falls der folgende Text kürzer oder länger ist.
Das hat sich bewährt bei mir...
Es gibt 10 Arten von Usern :
die, die Binärcode verstehen und die, die es nicht tun....
----------------------------------------------------------
STAR TREK FYNE :
http://www.fynegames.homepage.t-online.de
die, die Binärcode verstehen und die, die es nicht tun....
----------------------------------------------------------
STAR TREK FYNE :
http://www.fynegames.homepage.t-online.de
Re: Sprechblasen?
Das mit den Anfängen von Animationen läßt sich richten. Hab ich ehrlich gesagt nicht drauf geachtet wo der anfängt zu laufen oder sprechen. Wüßte aber nicht warum das nicht jedes mal auf Frame 1 gesetzt werden könnte.
Re: Sprechblasen?
Also meinetwegen musst du das nicht extra ändern. Auf die Sprechblasen werde ich jetzt eh verzichten und ansonsten finde ich das mit den Animationen visuel sogar eher positiv, da es so eine Art Zufallskomponente reinbringt.
Was aber in Zukunft praktisch sein könnte, wäre eine Möglichkeit auf die "Speech-Dauer" die sich ja aus dem Soundfile oder der Textlänge ergibt direkt zuzugreifen. Das wäre meiner Meinung nach der Schlüssel zu mehr Freiheit bei der Gestaltung dieses Spielelements.
@Manni: Vielen Dank für die Ausführliche Erläuterung. Ich denke das System ist für mein kleines Spiel etwas overpowered und auch die Tatsache, dass man alle Sprachausgaben selber schließen muss halte ich in meinem Fall für ungeeignet. Bei Dialogen wie in deinem Spiel finde ich es aber eine kluge Lösung. Bei mir wäre das wohl eher nervig, da es ständig kleine Speech-Elemente gibt und der Charakter alles kommentiert.
Was aber in Zukunft praktisch sein könnte, wäre eine Möglichkeit auf die "Speech-Dauer" die sich ja aus dem Soundfile oder der Textlänge ergibt direkt zuzugreifen. Das wäre meiner Meinung nach der Schlüssel zu mehr Freiheit bei der Gestaltung dieses Spielelements.
@Manni: Vielen Dank für die Ausführliche Erläuterung. Ich denke das System ist für mein kleines Spiel etwas overpowered und auch die Tatsache, dass man alle Sprachausgaben selber schließen muss halte ich in meinem Fall für ungeeignet. Bei Dialogen wie in deinem Spiel finde ich es aber eine kluge Lösung. Bei mir wäre das wohl eher nervig, da es ständig kleine Speech-Elemente gibt und der Charakter alles kommentiert.