V tejto lekcii sa pozrieme na tzv. _udalosti_ v SDL. Udalosti sú veci, čo sa počítaču, resp. operačnému systému, stanú, a oznámi ich programu. Tu sú nejaké príklady udalostí, čo môže operačný systém programu v SDL poslať: * "Užívateľ klikol na krížik, skonči sa." * "Užívateľ pohol myšou a teraz je na pozícii [21, 178]." * "Užívateľ natiahol okno na veľkosť 1000 krát 100." * "Prešlo 15 sekúnd, tak ti to oznamujem, presne ako si chcel." Programy majú na práci aj iné veci, ako spracovávať udalosti. Tie, ktoré ešte neboli spracované, sa zaradzujú do tzv. _fronty udalostí_. Keď má program práve chvíľu času, pozrie sa, aké udalosti v nej medzičasom pribudli, a zareaguje na nich. Základná funkcia na prácu s frontou udalostí je EventQueue.poll. Tá sa pozrie do fronty udalostí, a ak tam niečo je, tak to vráti. (Inak vráti _nil_.) h3. Typy udalostí Teraz ukážem, ako s tou udalosťou pracovať a zisťovať, čo je zač. Hlavne je dôležité, aký typ udalosti to vlastne je. Keďže Ruby je objektový jazyk, rôzne typy udalostí sú rozlíšené ako rôzne triedy. Základná udalosťová trieda je Event. Z nej dedia rôzne ďalšie triedy, ako napr. ResizeEvent a KeyUpEvent. Na všetkých objektoch v Ruby fungujú nejaké základné funkcie. Teraz sa budú hodiť dve: funkcia class zistí, akej triedy je ten objekt, a funkcia is_a? zistí, či je nejakej konkrétnej triedy. Hodila by sa praktická ukážka. Vyskúšajte tento program: loop event = EventQueue.poll if event != nil $screen.fill [0,0,0] $screen.print [100,100], "Prisla udalost typu #{event.class}", [255,255,255] $screen.flip end break if event.is_a? KeyDownEvent and event.key == K_ESCAPE Timer.delay 10 end Z nastavení okna vyhoďte FULLSCREEN, lebo niektoré udalosti, ako napr. QuitEvent (zatvorenie okna) alebo ActiveEvent (aktivovanie alebo deaktivovanie okna) sa dajú pozorovať iba vtedy, keď je program v okne. Celý pozostáva z jedného cyklu. Najprv zavolám funkciu EventQueue.poll. Keď dostabem nejakú udalosť, vypíšem jej typ na obrazovku. Program končí, keď sa stlačí kláves Esc. (Objekty triedy KeyDownEvent, čiže udalosti "stlačila sa kláves", majú atribút key, ktorý určuje, ktorá kláves sa to stlačila. Zoznam K_ konštánt pre jednotlivé klávesy je v dodatkoch.) *Úloha č. 1:* Napíšte, pochopte, spustite. (Zoznam typov udalostí je v dodatkoch. Nakoniec si ho prečítajte, je dôležitý.) h3. Používanie udalostí v programoch Programy, ktoré sme doteraz robili, od prvej lekcie až po štvrtú, fungovali tak, že najprv niečo urobili a potom čakali, kým