SayBackground / Sprachanimation
-
- Komplettlösungsnutzer
- Beiträge: 16
- Registriert: 15.05.2007, 19:32
SayBackground / Sprachanimation
Ich habe einen Wunsch. Wer erklärt mir SayBackground mit gleichzeitiger Sprechanimation ? Vielen Dank.
Habe eine schmale Region gemalt. Wenn Charakter drüber geht, soll der Verkäufer im Hintergrund jedes mal etwas anderes sagen. Das macht er. Aber er bewegt die Lippen nicht.
In der AGS Hilfe steht drin:
SayBackground: Note that the character's talking animation is not played if this function is used.
Mein Script: 2.72
// script for Region 1: Player walks onto region
if (Lucas1 == 0) {
cLucas.SayBackground("Herzlich Willkommen");
// DisplaySpeechBackground (LUCAS, "Herzlich Willkommen");
}
if (Lucas1 == 1) {
cLucas.SayBackground("Haben Sie einen Wunsch ?");
}
if (Lucas1 == 2) {
cLucas.SayBackground("Heute haben wir Cola im Angebot.");
}
if (Lucas1 == 3) {
cLucas.SayBackground("Kann ich behilflich sein ?");
}
if (Lucas1 < 3) {
Lucas1 += 1;
}
Habe eine schmale Region gemalt. Wenn Charakter drüber geht, soll der Verkäufer im Hintergrund jedes mal etwas anderes sagen. Das macht er. Aber er bewegt die Lippen nicht.
In der AGS Hilfe steht drin:
SayBackground: Note that the character's talking animation is not played if this function is used.
Mein Script: 2.72
// script for Region 1: Player walks onto region
if (Lucas1 == 0) {
cLucas.SayBackground("Herzlich Willkommen");
// DisplaySpeechBackground (LUCAS, "Herzlich Willkommen");
}
if (Lucas1 == 1) {
cLucas.SayBackground("Haben Sie einen Wunsch ?");
}
if (Lucas1 == 2) {
cLucas.SayBackground("Heute haben wir Cola im Angebot.");
}
if (Lucas1 == 3) {
cLucas.SayBackground("Kann ich behilflich sein ?");
}
if (Lucas1 < 3) {
Lucas1 += 1;
}
- KhrisMUC
- Adventure-Gott
- Beiträge: 4674
- Registriert: 14.03.2005, 00:55
- Wohnort: München
Die Sprechanimation muss als Parameter eNoBlock haben und gleichzeitig mit dem Satz gestartet werden.
Zusätzlich musst Du den Overlay speichern und überprüfen, wann er abgeschaltet wird.
Also:
Nicht getestet!
Zusätzlich musst Du den Overlay speichern und überprüfen, wann er abgeschaltet wird.
Also:
Code: Alles auswählen
Overlay*o; // globale Variable!
// global script, repeatedly_execute
if (cLucas.Animating && !o.IsValid) cLucas.UnlockView();
// room script, player walks onto region
String s;
if (Lucas1==0) s="Herzlich Willkommen";
if (Lucas1==1) s="Haben Sie einen Wunsch?";
if (Lucas1==2) s="Heute haben wir Cola im Angebot.";
if (Lucas1==3) s="Kann ich behilflich sein?";
if (Lucas1<3) Lucas1++;
o=cLucas.SayBackground(s);
cLucas.LockView(cLucas.SpeechView);
cLucas.Animate(cLucas.Loop, 5, eRepeat, eNoBlock);
Use gopher repellent on funny little man
-
- Komplettlösungsnutzer
- Beiträge: 16
- Registriert: 15.05.2007, 19:32
@KhrisMUC vielen Dank. Aber wie immer es geht nicht. Du musst noch mal ran
Fehlermeldung: Error Global Script undefined symbol "o"
Overlay*o; // globale Variable!
Habe ich in das room script file gemacht ?
// room script file
int Lucas1;
Overlay*o;
#sectionstart region1_a // DO NOT EDIT OR REMOVE THIS LINE
Im Global script habe ich reingesetzt ?
// global script, repeatedly_execute
function repeatedly_execute (){
DisplaySpeechQ_RE(); // place it before any other script code in rep. exec.
if (cLucas.Animating && !o.IsValid) cLucas.UnlockView();
if (IsGamePaused () != 1)
{
CheckTimers ();
// --- for the MovePlayer function ---....
Und der Rest ist normal im // room script, player walks onto region
Kannst du bitte den Code noch etwas genauer erklären ?
Was macht String s; ?
Und das hier: cLucas.Animate(cLucas.Loop, 5, eRepeat, eNoBlock);
Fehlermeldung: Error Global Script undefined symbol "o"
Overlay*o; // globale Variable!
Habe ich in das room script file gemacht ?
// room script file
int Lucas1;
Overlay*o;
#sectionstart region1_a // DO NOT EDIT OR REMOVE THIS LINE
Im Global script habe ich reingesetzt ?
// global script, repeatedly_execute
function repeatedly_execute (){
DisplaySpeechQ_RE(); // place it before any other script code in rep. exec.
if (cLucas.Animating && !o.IsValid) cLucas.UnlockView();
if (IsGamePaused () != 1)
{
CheckTimers ();
// --- for the MovePlayer function ---....
Und der Rest ist normal im // room script, player walks onto region
Kannst du bitte den Code noch etwas genauer erklären ?
Was macht String s; ?
Und das hier: cLucas.Animate(cLucas.Loop, 5, eRepeat, eNoBlock);
- KhrisMUC
- Adventure-Gott
- Beiträge: 4674
- Registriert: 14.03.2005, 00:55
- Wohnort: München
Ok, der Reihe nach:
Der Overlay o muss als globale Variable deklariert werden (damit er auch für die rep_ex existiert).
String s; deklariert eine Variable vom Typ String; in s speichere ich den Satz, damit nicht viermal im Code "cLucas.SayBackground" steht. Ist reine Geschmackssache, ich finds übersichtlicher so.
Der Animate-Befehl ist in der Hilfe gut erklärt.
-cLucas.Loop stellt sicher, dass der Charakter beim Sprechen in die richtige Richtung schaut
-5 ist die Geschwindigkeit: alle 5/40 Sekunden nächstes Frame
-eRepeat: Animation läuft kontinuierlich
-eNoBlock: im Hintergrund
Der Overlay o muss als globale Variable deklariert werden (damit er auch für die rep_ex existiert).
Code: Alles auswählen
// global script, Anfang
Overlay*o;
export o;
// script header
import Overlay*o;
Der Animate-Befehl ist in der Hilfe gut erklärt.
-cLucas.Loop stellt sicher, dass der Charakter beim Sprechen in die richtige Richtung schaut
-5 ist die Geschwindigkeit: alle 5/40 Sekunden nächstes Frame
-eRepeat: Animation läuft kontinuierlich
-eNoBlock: im Hintergrund
Use gopher repellent on funny little man
- DieFüchsin
- Adventure-Gott
- Beiträge: 4406
- Registriert: 12.03.2004, 16:55
Im AGS-Forum hat jemand ein Modul dafür geschrieben, hier der Link zum Code.
Danke, Adventuretreff! <3
-
- Komplettlösungsnutzer
- Beiträge: 16
- Registriert: 15.05.2007, 19:32
Danke. Aber ich komme nicht weiter.
Habe mich erstmal an KhrisMUC gehalten.
Benutze ich das "o" kommt folgende Fehlermeldung:
Das die Variable im Starterpaket schon definiert ist.
(int o =GetObjectAT(mouse....
Ersetze ich das "o" mit etwas anderem z.B. AB oder 33 dann kommt Fehlermeldung
"is Valid is not a public member of overlay"
Hab es hoffentlich genauso gemacht. Bitte schön ausführlich.
// global script, Anfang
Overlay*o;
export o;
// global script, repeatedly_execute
if (cLucas.Animating && !o.IsValid) cLucas.UnlockView();
// script header
import Overlay*o;
// room script, player walks onto region
String s;
if (Lucas1==0) s="Herzlich Willkommen";
if (Lucas1==1) s="Haben Sie einen Wunsch?";
if (Lucas1==2) s="Heute haben wir Cola im Angebot.";
if (Lucas1==3) s="Kann ich behilflich sein?";
if (Lucas1<3) Lucas1++;
o=cLucas.SayBackground(s);
cLucas.LockView(cLucas.SpeechView);
cLucas.Animate(cLucas.Loop, 5, eRepeat, eNoBlock);
Habe mich erstmal an KhrisMUC gehalten.
Benutze ich das "o" kommt folgende Fehlermeldung:
Das die Variable im Starterpaket schon definiert ist.
(int o =GetObjectAT(mouse....
Ersetze ich das "o" mit etwas anderem z.B. AB oder 33 dann kommt Fehlermeldung
"is Valid is not a public member of overlay"
Hab es hoffentlich genauso gemacht. Bitte schön ausführlich.
// global script, Anfang
Overlay*o;
export o;
// global script, repeatedly_execute
if (cLucas.Animating && !o.IsValid) cLucas.UnlockView();
// script header
import Overlay*o;
// room script, player walks onto region
String s;
if (Lucas1==0) s="Herzlich Willkommen";
if (Lucas1==1) s="Haben Sie einen Wunsch?";
if (Lucas1==2) s="Heute haben wir Cola im Angebot.";
if (Lucas1==3) s="Kann ich behilflich sein?";
if (Lucas1<3) Lucas1++;
o=cLucas.SayBackground(s);
cLucas.LockView(cLucas.SpeechView);
cLucas.Animate(cLucas.Loop, 5, eRepeat, eNoBlock);
- KhrisMUC
- Adventure-Gott
- Beiträge: 4674
- Registriert: 14.03.2005, 00:55
- Wohnort: München
Du musst das o schon überall ersetzen. Und ich wusste natürlich nicht, dass Du ein MMM-Pack benutzt.
Variablennamen dürfen nicht nur aus Ziffern bestehen, 33 geht also auf keinen Fall. AB sollte gehen. Groß- und Kleinschreibung ist wichtig; die Variable ab ist eine andere als Ab, aB und AB.
Und es heißt nicht ".IsValid" sondern nur ".Valid", sorry. Dann sollte es gehen, habs getestet.
Variablennamen dürfen nicht nur aus Ziffern bestehen, 33 geht also auf keinen Fall. AB sollte gehen. Groß- und Kleinschreibung ist wichtig; die Variable ab ist eine andere als Ab, aB und AB.
Und es heißt nicht ".IsValid" sondern nur ".Valid", sorry. Dann sollte es gehen, habs getestet.
Use gopher repellent on funny little man
-
- Komplettlösungsnutzer
- Beiträge: 16
- Registriert: 15.05.2007, 19:32
@KhrisMUC
Wer schreibt so spät bei Nacht und Wind?
Das ist der KhrisMUC ganz geschwind.
Er hat die Maus wohl in der Hand
Er faßt sie sicher ganz am Rand.
KhrisMUC, KhrisMUC, und hörest du nicht,
Was der Verkäufer leise spricht?
So und hier für alle die Zusammenfassung von Susi.
Ein Person die im Hintergrund verschiedene Sätze sagt wenn man(n) über eine Region läuft. AB=Globale Variable, Lucas= Name laut Char-Liste, Lucas1=Integer in Roomscript.
// global script, Anfang
Overlay*AB;
export AB;
// global script, repeatedly_execute
if (cLucas.Animating && !AB.Valid) cLucas.UnlockView();
// script header
import Overlay*AB;
// room script, player walks onto region
String s;
if (Lucas1==0) s="Herzlich Willkommen";
if (Lucas1==1) s="Haben Sie einen Wunsch?";
if (Lucas1==2) s="Heute haben wir Cola im Angebot.";
if (Lucas1==3) s="Kann ich behilflich sein?";
if (Lucas1<3) Lucas1++;
AB=cLucas.SayBackground(s);
cLucas.LockView(cLucas.SpeechView);
cLucas.Animate(cLucas.Loop, 5, eRepeat, eNoBlock);
Wer schreibt so spät bei Nacht und Wind?
Das ist der KhrisMUC ganz geschwind.
Er hat die Maus wohl in der Hand
Er faßt sie sicher ganz am Rand.
KhrisMUC, KhrisMUC, und hörest du nicht,
Was der Verkäufer leise spricht?
So und hier für alle die Zusammenfassung von Susi.
Ein Person die im Hintergrund verschiedene Sätze sagt wenn man(n) über eine Region läuft. AB=Globale Variable, Lucas= Name laut Char-Liste, Lucas1=Integer in Roomscript.
// global script, Anfang
Overlay*AB;
export AB;
// global script, repeatedly_execute
if (cLucas.Animating && !AB.Valid) cLucas.UnlockView();
// script header
import Overlay*AB;
// room script, player walks onto region
String s;
if (Lucas1==0) s="Herzlich Willkommen";
if (Lucas1==1) s="Haben Sie einen Wunsch?";
if (Lucas1==2) s="Heute haben wir Cola im Angebot.";
if (Lucas1==3) s="Kann ich behilflich sein?";
if (Lucas1<3) Lucas1++;
AB=cLucas.SayBackground(s);
cLucas.LockView(cLucas.SpeechView);
cLucas.Animate(cLucas.Loop, 5, eRepeat, eNoBlock);