Text soll immer oben im Screen stehen
Text soll immer oben im Screen stehen
Vielleicht kennt ihr es aus Zak McKracken, Maniac Mansion oder anderen Adventures: Der Text, den der Spieler spricht, der soll immer(!) oben im Screen stehen, weil dort der Screen schwarz ist ( wie beispielsweise auch in Zak McKracken 2 ). Das ist eventuell was einfaches, ich glaube aber eher das es total kompliziert ist. Wenn LucasFan es nicht weiss, habe ich jedenfalls keine Hoffnung mehr. Habt ihr 'ne Idee wie man das verwirklichen könnte?
-
- Süßwasserpirat
- Beiträge: 258
- Registriert: 22.09.2002, 21:28
- Kontaktdaten:
Eigentlich sollte DisplaySpeechAt so was leisten, meine ich, aber bei mir funktioniert das nicht richtig.
Vorstellbar wäre noch, dass du eine GUI mit einem Label verwendest und eine eigene DisplaySpeech-Funktion wie die folgende verwendest:
function MyDisplaySpeech (int charid, string message)
{
SetCharacterView (charid, character [charid].talkview + 1);
AnimateCharacter (charid, character [charid].loop, 3, 1);
SetLabelColor (STATUSLINE, 0, character [charid].talkcolor);
SetLabelText (STATUSLINE, 0, message);
int waittime = strlen (message) * 10;
while (waittime > 0)
{
Wait (1);
waittime--;
}
ReleaseCharacterView (charid);
SetLabelText (STATUSLINE, 0, "");
}
Vorstellbar wäre noch, dass du eine GUI mit einem Label verwendest und eine eigene DisplaySpeech-Funktion wie die folgende verwendest:
function MyDisplaySpeech (int charid, string message)
{
SetCharacterView (charid, character [charid].talkview + 1);
AnimateCharacter (charid, character [charid].loop, 3, 1);
SetLabelColor (STATUSLINE, 0, character [charid].talkcolor);
SetLabelText (STATUSLINE, 0, message);
int waittime = strlen (message) * 10;
while (waittime > 0)
{
Wait (1);
waittime--;
}
ReleaseCharacterView (charid);
SetLabelText (STATUSLINE, 0, "");
}
Hm den Script hab ich ins Global Script eingefügt, 'nen neuen GUI ( Statusline ) erstellt und abgespeichert. Keine Fehlermeldung. Wenn ich das Spiel nun abspeichere und teste wird der Text jedoch wieder wie sonst über den sprechenden Charactern geschrieben, es hat sich also nichts geändert
Hab ich was falsch gemacht?

-
- Süßwasserpirat
- Beiträge: 258
- Registriert: 22.09.2002, 21:28
- Kontaktdaten:
-
- Rätselmeister
- Beiträge: 2219
- Registriert: 11.06.2002, 18:22
- Wohnort: gone (forever)
- Kontaktdaten:
Code: Alles auswählen
while(waittime--)
{
wait(1);
}

Wer Ironie oder beleidigende Inhalte in diesem Beitrag findet, darf sie behalten.
http://www.thwboard.de | http://oph-qfb.sourceforge.net
http://www.thwboard.de | http://oph-qfb.sourceforge.net
-
- Süßwasserpirat
- Beiträge: 258
- Registriert: 22.09.2002, 21:28
- Kontaktdaten:
Ihr bringt mich durcheinander:
So sieht's bei mur aus. Jetzt meckert der wieder wegen "Was soll waittime sein?" Und meine Frage: Wo muss dieses "import..." hin? Ganz oben wo "function My Dis..." steht?
Sharalamude
Code: Alles auswählen
function MyDisplaySpeech (int charid, string message) {
SetCharacterView (charid, character [charid].talkview + 1);
AnimateCharacter (charid, character [charid].loop, 3, 1);
SetLabelColor (STATUSLINE, 0, character [charid].talkcolor);
SetLabelText (STATUSLINE, 0, message);
int waittime = strlen (message) * 10;
while(waittime--) {
wait(1); }
ReleaseCharacterView (charid);
SetLabelText (STATUSLINE, 0, "");
}
So sieht's bei mur aus. Jetzt meckert der wieder wegen "Was soll waittime sein?" Und meine Frage: Wo muss dieses "import..." hin? Ganz oben wo "function My Dis..." steht?
Sharalamude
-
- Süßwasserpirat
- Beiträge: 258
- Registriert: 22.09.2002, 21:28
- Kontaktdaten:
Also, mein Code ist getestet und funktioniert. Er mag einem C-Programmierer vielleicht umständlich erscheinen, don hat eine kürzere Variante genannt, die AGS vielleicht auch unterstützt.
Für die Import-Zeile:
Script - Edit script header (Strg-H)...
Dort im Script header die Zeile als neue Zeile einfügen. Falls schon was drinsteht: Es ist egal, ob diese Zeile als 1., letzte oder zwischen anderen eingefügt wird.
Für die Import-Zeile:
Script - Edit script header (Strg-H)...
Dort im Script header die Zeile als neue Zeile einfügen. Falls schon was drinsteht: Es ist egal, ob diese Zeile als 1., letzte oder zwischen anderen eingefügt wird.
-
- Süßwasserpirat
- Beiträge: 258
- Registriert: 22.09.2002, 21:28
- Kontaktdaten:
Das habe ich am 27.10.03 20:40 gemacht! Mehr ist nicht! Das ist die Funktion im global script. Wenn du die Funktion in anderen Räumen verwenden willst, dann brauchst du halt noch die import-Zeile im script header.
Und dann anstelle von DisplaySpeech eben MyDisplaySpeech verwenden.
Am besten du kopierst die Funktion in das global script und versuchst bei einem Character-Interaction-run-script (das ja auch im global script steht), die Funktion aufzurufen. Dann Testen.
Wenn das soweit klappt, dann fügst du die import-Zeile in den script header ein und versucht in einer room-/object-Interaction ein run script mit MyDisplaySpeech zu testen.
Wenn etwas nicht klappt, dann poste die genau Fehlermeldung.
Und dann anstelle von DisplaySpeech eben MyDisplaySpeech verwenden.
Am besten du kopierst die Funktion in das global script und versuchst bei einem Character-Interaction-run-script (das ja auch im global script steht), die Funktion aufzurufen. Dann Testen.
Wenn das soweit klappt, dann fügst du die import-Zeile in den script header ein und versucht in einer room-/object-Interaction ein run script mit MyDisplaySpeech zu testen.
Wenn etwas nicht klappt, dann poste die genau Fehlermeldung.
-
- Süßwasserpirat
- Beiträge: 258
- Registriert: 22.09.2002, 21:28
- Kontaktdaten:
1. Die Tastaturabfrage musst du selbst erledigen:
while ((waittime > 0) && (IsKeyPressed (27) == 0))
{
Wait (1);
waittime--;
}
Statt 27 trägst du die Taste ein, mit der es weitergehen soll
2. Die Wartezeit wird in
int waittime = strlen (message) * 10;
eingestellt. Nimm statt 10 einfach einen kleineren Wert. Probier's mit langen und kurzen Texten. Vielleicht ist eine Formel in der Art
waittime = Mindestwartezeit + strlen (message) * Textlängenwartezeit
besser geeignet. Da hilft nur Experimentieren (vielleicht auch auf unterschiedlich schnellen Computern).
while ((waittime > 0) && (IsKeyPressed (27) == 0))
{
Wait (1);
waittime--;
}
Statt 27 trägst du die Taste ein, mit der es weitergehen soll
2. Die Wartezeit wird in
int waittime = strlen (message) * 10;
eingestellt. Nimm statt 10 einfach einen kleineren Wert. Probier's mit langen und kurzen Texten. Vielleicht ist eine Formel in der Art
waittime = Mindestwartezeit + strlen (message) * Textlängenwartezeit
besser geeignet. Da hilft nur Experimentieren (vielleicht auch auf unterschiedlich schnellen Computern).
-
- Rätselmeister
- Beiträge: 2219
- Registriert: 11.06.2002, 18:22
- Wohnort: gone (forever)
- Kontaktdaten:
td@dogbertistania td $ echo `zcat /usr/share/man/man7/ascii.7.gz | grep "ESC" | groff -mandoc -Tascii | awk '{print $2" "$4" "}'`
27 ESC
Wer Ironie oder beleidigende Inhalte in diesem Beitrag findet, darf sie behalten.
http://www.thwboard.de | http://oph-qfb.sourceforge.net
http://www.thwboard.de | http://oph-qfb.sourceforge.net