11.07.2015 Views

Prenos vízií do reality bolí. - Vitajte na stránkach www.einsty ...

Prenos vízií do reality bolí. - Vitajte na stránkach www.einsty ...

Prenos vízií do reality bolí. - Vitajte na stránkach www.einsty ...

SHOW MORE
SHOW LESS
  • No tags were found...

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

P R O G R A M U J E M EDirect Animation6. èas: Nereaktívne objektyDoteraz pri práci s DirectAnimation sme vytvárali objekty rôznych tried, ktoré predstavo−vali 2D grafiku, transformáciu polohy èi tvaru objektu, farbu a pod. Tieto objekty, tzv.objekty správania sa (behaviors), boli buï konštantné, alebo premenlivé v èase. Ak si tedapredstavíme <strong>na</strong>pr. objekt triedy DATransform2, ktorý pre nás uchovával hodnotu o polo−he iného zobrazovaného objektu triedy DAImage, potom tento zobrazovaný objekt bolpo celý èas behu animácie <strong>na</strong> jednom mieste alebo sa pohyboval urèitou rýchlosou vzávislosti od toho, èi spomí<strong>na</strong>ný objekt transformácie bol konštantný (constant behavior)alebo premenlivý v èase (time−varying behavior). Pozrime sa <strong>na</strong> <strong>na</strong>sledujúce dva zápisy. Vprvom je objekt triedy DAImage konštantný, v druhom sa mení – otáèa urèitou rýchlosou(hodnota argumentu násobená hodnotou LocalTime).image1 = image1.Transform(lib.Rotate2Degrees(10));// objekt konštantný;image1 = image1.Transform(lib.Rotate2RateDegrees(10));// objekt premenlivý v èase;V oboch prípa<strong>do</strong>ch však ide o tzv. nereaktívne objekty (non−reactive behaviors),ktoré nereagujú <strong>na</strong> iadne vyvolávané udalosti (events). Vyvolanou udalosou rozumie−me <strong>na</strong>pr. stlaèenie konkrétneho tlaèidla klávesnice alebo tlaèidla myši, uplynutie neja−kého èasového intervalu a pod. Druhou skupinou sú reaktívne objekty (reactive beha−viors), ktoré, <strong>na</strong>opak, <strong>na</strong> vyvolané udalosti reagujú. Vytváranie práve takýchto reaktív−nych objektov a k nim príslušných udalostí pridáva <strong>na</strong>šej animácii prvky interaktivity.Jedným z objektov povaovaných za èasovo závislé je aj objekt známej triedyDAPoint2, ktorý vracia jed<strong>na</strong> z relevantných vlastností k tejto triede, a to vlastnoslib.MousePosition. Vrátený objekt predstavuje aktuálnu polohu ukazovate¾a myši. Keïtúto hodnotu pouijeme ako parameter pre transformáciu, ktorú následne aplikujeme<strong>na</strong> ¾ubovo¾ný zobrazovaný 2D objekt, <strong>do</strong>siahneme, e tento objekt bude kopírovapolohu ukazovate¾a myši. Tento objekt teda bude ma prvky interaktivity, aj keï nie jepovaovaný za reaktívny. Takúto transformáciu vytvoríme <strong>na</strong>pr. <strong>na</strong>sledujúcim zápisom:image1 = image1.Transform(lib.Translate2Point(lib.MousePosition));REAKTÍVNE OBJEKTY. Ako sme u uviedli, reaktívne objekty ako protiklad k nere−aktívnym sa menia v závislosti od vyvolávaných udalostí a predstavujú pre nás základ−ný prvok pri tvorbe interaktívnych animácií. Vyvolávanú udalos v prostredí Direct−Animation predstavuje objekt triedy DAEvent. Skôr ne zaèneme vytvára reaktívneobjekty reagujúce <strong>na</strong> konkrétnu vyvolanú udalos, musíme vedie, ako túto udaloszadefinova. Preto sa <strong>na</strong>jprv blišie pozrieme <strong>na</strong> triedu DAEvent. Pre zaèiatok si všakpredstavíme len funkcie z triedy DAStatics relevantné k triede DAEvent, ktoré námumonia objekty triedy DAEvent vytvára. K ostatným funkciám, teda k funkciám z trie−dy DAEvent, sa vrátime a <strong>na</strong>koniec, keï sa oboznámime s jednotlivými druhmi vyvo−lávaných udalostí a ich obsluhou.TRIEDA DAEVENT – FUNKCIE A VLASTNOSTI RELEVANTNÉ K TRIEDEDAEVENT. Vytvorením objektu triedy DAEvent definujeme udalos, ktorá predstavujeurèitý stav, prípadne urèitú akciu od pouívate¾a. Táto udalos potom hovorí, kedy mádôjs k zmene alebo reakcii. Urèite k <strong>na</strong>jèastejšie vyvolávaným udalostiam patrí udalosvyvolaná kliknutím <strong>na</strong> ¾avé alebo pravé tlaèidlo myši. Takéto udalosti, resp objekty trie−dy DAEvent vytvoríme pomocou týchto relevantných vlastností z triedy DAStatics:lib.LeftButtonDown,lib.RightButtonDown.Ide o read−only vlastnosti predstavujúce udalosti, ku ktorým dôjde v momente stlaèe−nia ¾avého, resp. pravého tlaèidla myši.Vo všeobecnosti kadá udalos (objekt triedy DAEvent), ku ktorej dôjde, vracia urèitédáta. Tieto dáta pre nás môu, ale nemusia ma nejaký výz<strong>na</strong>m. Napríklad objekt triedyDAEvent vrátený vlastnosami lib.LeftButtonDown a lib.RightButtonDown neobsahuje ni−jaké pre nás uitoèné údaje. Je len nosite¾om informácií o zmene stavu, v tomto prípadestlaèení jedného z tlaèidiel myši. Naproti tomu iné objekty triedy DAEvent vrátené niektorý−mi inými funkciami, ako <strong>na</strong>pr. lib.AndEvent(ev1, ev2,), obsahujú ïalšie potrebné údaje.Ïalšie vlastnostilib.LeftButtonUp,lib.RightButtonUppredstavujú udalosti, ktoré sú vyvolané v momente uvo¾nenia stlaèených tlaèidiel myši.Jednotlivé prvky animácie ïalej môu reagova aj <strong>na</strong> stlaèenie klávesu. Funkcielib.KeyDown(KeyCode),lib.KeyUp(KeyCode)vracajú objekt triedy DAEvent, ktorý <strong>na</strong>stane v momente stlaèenia, resp. uvo¾nenia kláve−su definovaného parametrom KeyCode. Parameter KeyCode je èíselná premenná typulong. Identifikátory klávesov sú odvodené od tzv. scan code, pouívaných funkciamiWin32 API.Hexadecimálne hodnoty parametra KeyCode pre jednotlivé špeciálne klávesy sú vede−né v <strong>na</strong>sledujúcej tabu¾ke.Tab. è. 1 Hexadecimálne hodnoty parametra KeyCode pre špeciálne klávesykláves keycode kláves keycode kláves keycode kláves keycodePGUP 10021 NUMPAD2 10062 SEPARATOR 1006C F7 10076PGDN 10022 NUMPAD3 10063 SUBTRACT 1006D F8 10077END 10023 NUMPAD4 10064 DECIMAL 1006E F9 10078HOME 10024 NUMPAD5 10065 DIVIDE 1006F F10 10079LEFT 10025 NUMPAD6 10066 F1 10070 F11 1007AUP 10026 NUMPAD7 10067 F2 10071 F12 1007BRIGHT 10027 NUMPAD8 10068 F3 10072 INSERT 1002DDOWN 10028 NUMPAD9 10069 F4 10073 DELETE 1002ENUMPAD0 10060 MULTIPLY 1006A F5 10074NUMPAD1 10061 ADD 1006B F6 10075Udalos vyvolanú <strong>na</strong>pr. stlaèením klávesu PGUP vytvoríme týmto zápisom:keyEvent = lib.KeyDown(0x10021);Pre ostatné klávesy môete poui aj ich ANSI hodnotu. Napríklad z<strong>na</strong>kom a – z zod−povedá decimál<strong>na</strong> ANSI hodnota 97 – 122.Potom udalos vyvolanú <strong>na</strong>pr. stlaèením klávesu a vytvoríme týmto zápisom:keyEvent = lib.KeyDown(97);Všetky hodnoty Win32 Scan codes, ako aj hodnoty ANSI nájdete <strong>na</strong>pr. <strong>na</strong> <strong>www</strong>.msdn.comv èasti Library pod k¾úèovým slovom „scan code“.Úplne inou kategóriou sú udalosti vyvolané po uplynutí stanoveného èasu od spuste−nia animácie. Práve tie budeme èasto vyuíva, aby sme <strong>do</strong>siahli urèitú èasovú následnosjednotlivých prvkov animácie. Funkcielib.TimerAnim(timeout),lib.Timer(timeout)vracajú objekt triedy DAEvent, ktorý je spustený po uplynutí èasu stanoveného paramet−rom timeout. Ako zvyèajne v anim variante funkcie je parameter animované èíslo typuDANumber.Pomocou tejto funkcie teda môeme <strong>na</strong>èasova spustenie konkrétnych animovanýchsekvencií. Pre riadenie a spúšanie jednotlivých sekvencií tie môeme poui ïalšiu za−ujímavú a urèite uitoènú funkciu, a to:lib.ThenEvent(e1, e2).Funkcia vracia objekt triedy DAEvent èie udalos (totonú s udalosou e2), ktorá jevyvolaná, len èo dôjde k vyvolaniu udalosti e1.Posledná skupi<strong>na</strong> funkcií definuje udalosti vyvolávané <strong>na</strong> základe zmeny stavov výro−kov (predicate) alebo i<strong>na</strong>k tzv. booleovských premenných (v DirectAnimation ide o objek−ty triedy DABoolean) vracajúcich hodnotu True alebo False. Patria sem aj funkcie definu−júce udalosti vyvolávané <strong>na</strong> základe výsledku základných logických operácií (AND, OR,NOT) <strong>na</strong>d udalosami. Funkcialib.Predicate(bool)vracia objekt triedy DAEvent, ktorý je vyvolaný v momente zmeny parametra bool (objekttriedy DABoolean) z hodnoty False <strong>na</strong> hodnotu True.Funkcielib.AndEvent(first, second),lib.OrEvent(first, second),lib.NotEvent(event),definujú udalosti vyvolávané <strong>na</strong> základe výsledku základných logických operácií (AND, OR, NOT)<strong>na</strong>d udalosami. Funkcia logického súèinu (AndEvent) definuje udalos, ktorá <strong>na</strong>stane práve vmomente, keï dôjde k vyvolaniu oboch udalostí first a second súèasne. Funkcia logického súètu(OrEvent) definuje udalos, ktorá <strong>na</strong>stane práve v momente, keï dôjde k vyvolaniu aspoò jed−nej z udalostí first a second. Nakoniec funkcia negácie (NotEvent) definuje udalos, ktorá jevyvolaná, práve keï udalos event je neaktív<strong>na</strong>, resp. pokia¾ ne<strong>do</strong>šlo k jej vyvolaniu.Nakoniec ešte dve vlastnosti z funkcie DAStatics, a to:lib.Never,lib.Always.116 PC REVUE 7/2003

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!