Autor Thema: Charaktere sollen gleichzeitig laufen und sprechen  (Gelesen 5009 mal)

Scorpe

  • kleiner Tentakelsaugknopf
  • **
  • Beiträge: 32
    • Profil anzeigen
Charaktere sollen gleichzeitig laufen und sprechen
« am: 15. Juni 2013, 21:13:51 »
In vielen Episoden, z.B. in der Schlussszene von Episode 67 sieht man wie verschiedene Charaktere durch die Gegend rennen und gleichzeitig was rufen. Wie kriegt man sowas hin? Also dass einmal die Charaktere gleichzeitig laufen und sprechen können und dass auch noch verschiedene Personen gleichzeitig (durcheinander) rufen und die verschiedenen Texte zur selben Zeit auf dem Bildschirm erscheinen. Normalerweise ist es ja so, die eine Person sagt was, der Text geht weg und danach sagt eine andere was.

KhrisMUC

  • Moderator
  • volljähriger Tentakel
  • *****
  • Beiträge: 989
    • Profil anzeigen
Re: Charaktere sollen gleichzeitig laufen und sprechen
« Antwort #1 am: 16. Juni 2013, 18:31:59 »
Grundsätzlich kann man "blockende" Sachen nicht parallel laufen lassen.
Zwei Charaktere gleichzeitig laufen zu lassen, ist aber sehr einfach:
[ags]  cDave.Walk(123, 456, eNoBlock);
  cBerndard.Walk(456, 123, eBlock);[/ags]
Hier läuft Dave los, und wegen eNoBlock macht AGS sofort mit dem nächsten Kommando weiter. Dieses wiederum enthält eBlock, d.h. diesmal wartet AGS, bis Bernard angekommen ist. Idealerweise kommt Dave zuerst an, ansonsten schickt man halt Bernard zuerst und "nickt-blockend los".

Beim Sprechen wirds etwas komplizierter. Grundsätzlich ist LucasArts-Style-Speech ein simpler Overlay.CreateTextual(...), bei dem gleichzeitig die Figur mit der Speechview animiert wird. Das lässt sich relativ einfach faken, indem man diese Kommandos einfach selbst ausruft. Man kann SayBackground benutzten, anstatt den Overlay selbst zu erzeugen, das ist vermutlich einfacher.
Ein gleichzeitiges .Say, wie oben mit .Walk geht hier aber nicht.

Code (circa):
[ags]  Overlay *temp = cDave.SayBackground("HALLO");
  cDave.LockView(cDave.SpeechView);
  cDave.Animate(cDave.Loop, 4, eRepeat, eNoBlock);
  cBernard.Say("HALLO");  // blockendes Say, -> zwei HALLOs
  // danach: aufräumen
  cDave.UnlockView();
  if (temp != null && temp.Valid) temp.Remove();[/ags]

Scorpe

  • kleiner Tentakelsaugknopf
  • **
  • Beiträge: 32
    • Profil anzeigen
Re: Charaktere sollen gleichzeitig laufen und sprechen
« Antwort #2 am: 17. Juni 2013, 22:59:48 »
Vielen Dank für die Hilfe, das hilft mir auf jeden Fall schon sehr viel weiter. Hatte ich mir irgendwie schon gedacht, dass das gleichzeitige Laufen und Sprechen nur "hintenrum" geht ;), aber ich werd's auf jeden Fall ausprobieren.

Kiwa

  • volljähriger Tentakel
  • *****
  • Beiträge: 779
  • Geschlecht: Männlich
    • Profil anzeigen
Re: Charaktere sollen gleichzeitig laufen und sprechen
« Antwort #3 am: 17. Juni 2013, 23:46:44 »
Ich habe es mal nur mit dem SayBackground und dem eNoBlock und eBlock Befehlen ausprobiert und es geht.

Ich habe es im Mansion SP ausprobiert:

[ags]cDave.EnterRoom(5, 294, 143, eDirDown);
  cBernard.EnterRoom(5, 466, 143, eDirDown);
  Wait(40);
  player.SayBackground("Dr. Fred labert...");
  cDave.SayBackground("Dave labert...");
  cBernard.SayBackground("Bernie labert...");
  cDave.Walk(341, 143, eNoBlock);
  cBernard.Walk(414, 143, eBlock); // <-- ganz wichtig ist, das hier ein eBlock steht, sonst klappt es nicht
  cDave.Walk(294, 143, eNoBlock);
  cBernard.Walk(466, 143, eNoBlock);[/ags]

Dr. Fred habe ich als player ausgewählt und ihn direkt vor der Villa in die Mitte von Dave und Bernard plaziert. x = 381 und y = 143, als Startraum 5 auswählen.
Den Code habe ich in die room_AfterFadeIn() Funktion eingefügt. Wenn du dann auf Start klickst, läuft es ab und wenn du in die Villa gehst und wieder raus auch.

Jetzt laufen Bernard und Dave hin und her und alle sind gleichzeitig am reden.

Ich traue mich es kaum zu sagen, aber so erscheint es mir einfacher als von KhrisMUC gezeigt. Oder ist meine Lösung nicht das was du gesucht hast? Wenn du jetzt noch mehr Leute hast, musst du immer an der passenden Stelle beim Walk den eBlock-Parameter benutzen, sonst klappt es nicht. Einfach mal ausprobieren.

@KhrisMUC
Wenn ich gerade Unsinn gepostet habe(und deine Lösung doch besser ist), bitte ich um Gnade. ;D
« Letzte Änderung: 17. Juni 2013, 23:48:55 von Kiwa »
Das Leben ist ein Adventure. Aber ohne Komplettlösung.

Für fast alles gibt es eine logische Erklärung. Für alles andere ein Placebo.

Scorpe

  • kleiner Tentakelsaugknopf
  • **
  • Beiträge: 32
    • Profil anzeigen
Re: Charaktere sollen gleichzeitig laufen und sprechen
« Antwort #4 am: 17. Juni 2013, 23:49:13 »
Das ist genau das was ich gesucht habe! Cool, damit komme ich auf jeden Fall weiter, vielen Dank! Mehr als drei Leute wollte ich auch nicht rumrennen und labern lassen, das gäbe dann doch zuviel Durcheinander ;).

Kiwa

  • volljähriger Tentakel
  • *****
  • Beiträge: 779
  • Geschlecht: Männlich
    • Profil anzeigen
Re: Charaktere sollen gleichzeitig laufen und sprechen
« Antwort #5 am: 17. Juni 2013, 23:51:53 »
Freut mich wenn ich helfen konnte ...  :)
Das Leben ist ein Adventure. Aber ohne Komplettlösung.

Für fast alles gibt es eine logische Erklärung. Für alles andere ein Placebo.

KhrisMUC

  • Moderator
  • volljähriger Tentakel
  • *****
  • Beiträge: 989
    • Profil anzeigen
Re: Charaktere sollen gleichzeitig laufen und sprechen
« Antwort #6 am: 17. Juni 2013, 23:55:37 »
Ich habe beschrieben, wie man gleichzeitiges animiertes, blockendes Sprechen erzeugt. Ist also nicht ganz das Gleiche.
Hab aber gerade gesehen, dass Scorpe eher nach Laufen+Sprechen gleichzeitig gefragt hat, nicht nach gleichzeitigem Laufen und separat nach gleichzeitigem Sprechen :)
« Letzte Änderung: 17. Juni 2013, 23:56:53 von KhrisMUC »