Text soll immer oben im Screen stehen

Fragen zu "Adventure Game Studio"? Hier rein!
Antworten
Sharalanude

Text soll immer oben im Screen stehen

Beitrag von Sharalanude »

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?
a-v-o
Süßwasserpirat
Süßwasserpirat
Beiträge: 258
Registriert: 22.09.2002, 21:28
Kontaktdaten:

Beitrag von a-v-o »

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, "");
}
Sharalamude

Beitrag von Sharalamude »

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?
a-v-o
Süßwasserpirat
Süßwasserpirat
Beiträge: 258
Registriert: 22.09.2002, 21:28
Kontaktdaten:

Beitrag von a-v-o »

Anstelle von DisplaySpeech verwendest du MyDisplaySpeech. Also, ändere das entsprechend in deinen Scripts.
Sharalamude

Beitrag von Sharalamude »

dann sagt das programm er kennt den befehl nicht ...
theDon
Rätselmeister
Rätselmeister
Beiträge: 2219
Registriert: 11.06.2002, 18:22
Wohnort: gone (forever)
Kontaktdaten:

Beitrag von theDon »

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
a-v-o
Süßwasserpirat
Süßwasserpirat
Beiträge: 258
Registriert: 22.09.2002, 21:28
Kontaktdaten:

Beitrag von a-v-o »

Dann brauchst du wohl noch einen Eintrag im script header:

import function MyDisplaySpeech (int charid, string message) ;

Auf diese Weise ist die Funktion nicht nur im global script sondern in allen Scripts verfügbar.
Sharalamude

Beitrag von Sharalamude »

Ihr bringt mich durcheinander:

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
a-v-o
Süßwasserpirat
Süßwasserpirat
Beiträge: 258
Registriert: 22.09.2002, 21:28
Kontaktdaten:

Beitrag von a-v-o »

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.
Sharalamuide

Beitrag von Sharalamuide »

jaja wo das im script header sein muss weiss ich, is klar. poste mal deinen script, so wie er bei dir im global script steht, bitte!
a-v-o
Süßwasserpirat
Süßwasserpirat
Beiträge: 258
Registriert: 22.09.2002, 21:28
Kontaktdaten:

Beitrag von a-v-o »

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.
Sharalamude

Beitrag von Sharalamude »

JAAA ES GEHT! Allerdings mit zwie Problem:

1. Ich kann den Text nicht überspringen.
2. Bis der nächste Text angezeigt wirds dauert ewig. Das schafft ja 'ne Schnecke zu lesen
a-v-o
Süßwasserpirat
Süßwasserpirat
Beiträge: 258
Registriert: 22.09.2002, 21:28
Kontaktdaten:

Beitrag von a-v-o »

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).
Sharalamude

Beitrag von Sharalamude »

wasn esc für ne tastenzahl ?
theDon
Rätselmeister
Rätselmeister
Beiträge: 2219
Registriert: 11.06.2002, 18:22
Wohnort: gone (forever)
Kontaktdaten:

Beitrag von theDon »

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
Antworten