Hlavná stránka | Úloha č. 1 | Úloha č. 2 | Úloha č. 3 | Úloha č. 4 | Úloha č. 5


Úloha č. 4 - Inteligentní objekt VRML (se skriptem)

Zadanie

  1. Přidejte animace otáčení celého nástroje a exportujte příslušnou startovací událost do záhlaví příslušného prototypu (exposedField SFTime startRotation)
  2. Vytvořte panel HUD (Head-Up Display) s jedním tlačítkem a umístěte jej do hudebního sálu. Zahajte animaci otáčení všech hudebních nástrojů při aktivaci tlačítka.
  3. Definujte Script, který si bude pamatovat posloupnost zahraných tónů. Do panelu HUD přidejte druhé tlačítko a propojte je s tímto skriptem.
  4. Do skriptu přidejte funkci Replay, která zajistí přehrání zaznamenané posloupnosti tónů. Přesměrujte druhé tlačítko panelu HUD na tuto funkci.
  5. Definujte třetí tlačítko v panelu HUD a propojte je s funkcí Reset vybraného nástroje. Tato funkce vynuluje posloupnost dříve zaznamenaných tónů.

Riešenie

Zvonkohra
(tubular bells)
Klavír Hudobná sála Výsledná scéna

Popis riešenia

Do prototypov zvonkohry a klavíra pribudli nasledujúce položky:

  eventOut SFInt32 instrumentID     # vysiela id hudobneho nastroja
  eventOut SFInt32 elementID        # vysiela id hrajucej casti nastroja (tonu)
  eventOut SFTime  elementTime      # vysiela cas, kedy bol ton zahrany
  
  eventIn  SFInt32 playInstrument   # prijima id hudobneho nastroja pre zahratie tonu
  eventIn  SFInt32 playElement      # prijima id hrajucej casti nastroja (tonu)
  eventIn  SFTime  playTime         # prijima cas pre zahratie tonu

Pribudol prototyp Hud (Head-Up Display):

PROTO Hud [
  eventIn   SFInt32 recInstrument   # prijima id hudobneho nastroja pri nahravani
  eventIn   SFInt32 recElement      # prijima id hrajucej casti nastroja (tonu) pri nahravani
  eventIn   SFTime  recTime         # prijima cas zahratia tonu pri nahravani

  eventOut  SFInt32 playInstrument  # vysiela id hudobneho nastroja pri prehravani
  eventOut  SFInt32 playElement     # vysiela id hrajucej casti nastroja (tonu) pri prehravani
  eventOut  SFTime  playTime        # vysiela cas zahratia tonu pri prehravani

  eventOut  SFTime  rotateTime      # vysiela cas zaciatku automatickej rotacie
]

Riešenie umožňuje nahrávať na jeden spoločný záznam ľubovoľný počet nástrojov, pričom každý nástroj može mať rôzny počet častí, ktoré vydávajú tón.

Pri hraní na hudobný nástroj sa vysielajú udalosti instrumentID, elementID a elementTime. Tie su prepojené so vstupnými udalosťami HUDu: recInstrument, recElement a recTime. Pri zapnutom nahrávaní sa tieto udalosti postupne ukladajú do poľa.

Pri prehrávaní sa vo vnútri HUDu spustí časovač, ktorý v nahraných časoch posiela uložené záznamy prostredníctvom udalostí playInstrument, playElement a playTime, ktoré sú prepojené s rovnomenými vstupnými udalosťami nástrojov. Po ich prijatí nástroj skontroluje, či playInstrument odpovedá jeho identifikátoru a v prípade zhody prehrá daný tón.

Do konzoly prehliadača sa priebežne zapisujú prevádzané akcie a ich parametre.

Schémy dynamických akcií:

Výpisy skriptov: