Gibt es eine Möglichkeit, die einzelnen Bilder der Sprechanimation zufällig abspielen zu lassen?
MfG
zufällige Sprechanimation *einfach gelöst*
- Saiyaman
- Verpackungs-Wegwerfer
- Beiträge: 74
- Registriert: 07.05.2005, 12:25
zufällige Sprechanimation *einfach gelöst*
Zuletzt geändert von Saiyaman am 05.02.2006, 19:10, insgesamt 1-mal geändert.
- KhrisMUC
- Adventure-Gott
- Beiträge: 4674
- Registriert: 14.03.2005, 00:55
- Wohnort: München
Einfach: mehrere SpeechViews erstellen, ein eigenes Say-Kommando scripten und darin vor dem Sprechen eine zufällige Character.SpeechView festlegen. (Nicht genau das, was Du willst, aber vielleicht reicht es Dir.)
Schwierig: einen zweiten, unsichtbaren Charakter sprechen lassen, der an der gleichen Position steht, und dem Hauptcharakter währenddessen abhängig von der Blickrichtung zufällige Character.Frames zuweisen.
Bei Dialogen musst Du die zweite Methode benutzen, im Nachhinein ist diese garnicht soo schwierig umzusetzen. Muss jetzt weg, sonst würde ich ein script posten.
EDIT: (hab doch noch Zeit, hehe)
Statt der Hauptfigur lässt Du einfach immer "Dummy" reden.
(Mach das mal mit PaC-DK
)
Schwierig: einen zweiten, unsichtbaren Charakter sprechen lassen, der an der gleichen Position steht, und dem Hauptcharakter währenddessen abhängig von der Blickrichtung zufällige Character.Frames zuweisen.
Bei Dialogen musst Du die zweite Methode benutzen, im Nachhinein ist diese garnicht soo schwierig umzusetzen. Muss jetzt weg, sonst würde ich ein script posten.
EDIT: (hab doch noch Zeit, hehe)
Code: Alles auswählen
int talking=0;
int lastframe=-1;
repeatedly_execute() {
cDummy.room=player.room;
cDummy.X=player.x;
cDummy.Y=player.y;
if (cDummy.View==cDummy.SpeechView) { // keine Ahnung, ob das funktionert...
talking=1;
SetTimer(1,20); // Framewechsel alle halbe Sekunde
}
else {
talking=0;
}
if (talking && IsTimerExpired(1)) {
player.ChangeView(player.SpeechView);
int i=-1;
while(i==lastframe) {
i=Random(5); // sechs (0-5) verschiedene talking-Frames pro loop
}
lastframe=i;
player.Frame=i;
SetTimer(1,20);
}
if (talking==0) {
player.UnlockView();
lastframe=-1;
}
}
(Mach das mal mit PaC-DK

Use gopher repellent on funny little man
- Saiyaman
- Verpackungs-Wegwerfer
- Beiträge: 74
- Registriert: 07.05.2005, 12:25
Code: Alles auswählen
int talking = 0;
int lastFrame = -1;
function repeatedly_execute_always()
{
// raondom speech
if (player.View == player.SpeechView)
{
talking = 1;
SetTimer(1, 20);
player.LockView(player.View);
}
else
{
talking = 0;
}
if ((talking == 1) && IsTimerExpired(1))
{
int i = -1;
while (i == lastFrame)
{
i = Random(5);
}
lastFrame = i;
player.Frame = i;
SetTimer(1, 20);
}
if (talking == 0)
{
//player.UnlockView(); --- auskommentiert, da sich sonst der Charakter nie bewegt
lastFrame = -1;
}
}

Ohne Timer wechselt die Sprechanimation unheimlich schnell immer wieder willkürlich - so wie sie es soll. Nur muss das halt langsamer geschehen.
Mach ich mit dem Timer was falsch?
Edit: Nach dem Sprechen wird automatisch "geunlocked", sodass ich wieder normal laufen kann

------------- UPDATE ------------
So funktionierts:
Code: Alles auswählen
function game_start()
{
SetTimer(1, 20);
}
int talking = 0;
function repeatedly_execute_always()
{
// random speech
if (player.View == player.SpeechView) talking = 1;
else talking = 0;
if (talking && IsTimerExpired(1))
{
player.Frame = Random(5);
SetTimer(1, 20);
}
}


MfG
- KhrisMUC
- Adventure-Gott
- Beiträge: 4674
- Registriert: 14.03.2005, 00:55
- Wohnort: München