Na začiatku tejto diskusie som uviedol zdrojový kód, ktorý mal dva nedostatky:
- vo skripte game.loop bolo treba dať do cyklus while(true) podmienku if, v ktorej sa testoval, či daná postava hovorí alebo nie. Ak by bolo vo hre napr. 30 postáv, engine by v každom kroku tohto nekonečného cyklu musel testovať túto podmienku.
Z toho plynie, že je to veľmi neefektívne!- stalo sa, že okno občas bliklo,
čo bolo veľmi nežiadúce!Prišiel som a otestoval som veľmi jednoduché riešenie, ktoré spočíva v preťažení metódy Talk a pridaní jedného parametra do zoznamu parametrov tejto metódy.
Preťažená metóda Talk vyzerá takto:
method Talk(Text, IsLast, SoundFilename, Duration, TalkStances, TextAlignment)
{
WinSubtitlesBox.Visible = true;
this.Talk(Text, SoundFilename, Duration, TalkStances, TextAlignment);
// aby nepríjemne neblikal text
Sleep(100);
if(IsLast)
{
WinSubtitlesBox.Visible = false;
Sleep(20);
}
}
Príklad volania metódy:
this.Talk("Ahoj, toto je testovací prototyp na zobrazenie okna dialógov.");
this.Talk("Tak o čom teda pokecáme?");
this.Talk("Tak o čom teda pokecáme?");
this.Talk("Tak o čom teda pokecáme?");
this.Talk("Tak o čom teda pokecáme?");
this.Talk("Tak o čom teda pokecáme?", true);
Zavolá sa preťažená metóda Talk na object actor. Zobrazí sa okno, kde budú zobrazené titulky. Toto okno bude zobrazené dovtedy, pokiaľ nedáme inštrukciu, aby sa zavrelo. Touto inštrukciou je predanie argumentu typu 1 alebo true ako druhý argument funkcie Talk. Pokiaľ bude v rozhovore viacero viet za sebou, stačí predať tento argument až v poslednom volaní funkciu Talk.
Keď bude mať postava povedať iba jednu vetu, volanie metódy sa zmení na this.Talk("blah“, true);
Tu je link na stiahnutie WPR:
http://www.edisk.sk/stahnout-soubor/60421/SubtitlesBox.rar_2.98MB.htmlEnjoy
