next up previous
Next: Pokračovanie s myšou alebo Up: grafika Previous: Škriatkovia alebo "Obrázky s

Jemný úvod do myšovania alebo "Myšie strašidlo"

V tejto lekcii sa dozviete niečo o práci s myšou. Nedozviete sa ale ani zďaleka všetko. Napríklad taký detail, ako urobiť, aby bolo polohu myši na obrazovke aj vidieť si necháme až na budúcu lekciu. Takže dnes síce budeme pracovať s myšou, ale bude neviditeľná.

Predtým, než sa k myši dostaneme, treba však povedať pár slov o bitových maskách. Predstavte si, že si potrebujete zapamätať jednu logickú hodnotu. Vyhradíte si na ňu pravdepodobne premennú typu int. Ak je v nej 0, logická hodnota je nepravda, ak je v nej hocičo okrem nuly, logická hodnota je pravda. Ak si chcete zapamätať jednu logickú hodnotu, tak je to v poriadku. Ale keby ste si ich chceli zapamätať osem, je takýto prístup mrhaním. Dá sa to spraviť šikovnejšie. A pomôže nám k tomu dvojková sústava.

Napríklad číslo 75 sa v dvojkovej sústave napíše ako 01001011. Každá jeho číslica sa dá použiť na zapamätanie jednej logickej hodnoty 1 - pravda, 0 - nepravda. To by bolo fajn, ale aby sa s tým pohodlne robilo, bolo by treba nájsť spôsob, ktorým sa dá jednoducho zistiť, aká je tretia cifra zprava a spôsob ako rýchlo vyrobiť číslo, ktoré má prvú, druhú a piatu cifru jedničky a ostatné nuly.

Na prvú z týchto vecí sa používa operátor &. Funguje podobne ako operátor && v logických podmienkach (výsledok je pravda len ak sú pravdivé oba vstupy) iba že to spraví pre jednotlivé bity. Takže napríklad 01101010 & 11010110 bude 01000010 pretože iba na druhej a siedmej cifre zľava majú obe čisla jednotky. Ako teda zistiť, či je v premennej a na tretej cifre zľava jednotka? Jednoducho. Ak tam jednotka nie je, tak výraz (a & 4) bude nula (pretože 4 v dvojkovej sústave je 00000100). Ak tam jednotka je, výraz bude nenulový.[*]

Takže naspäť ku knižnici allegro. Ak chceme používať myš, treba jej podporu zapnúť. Teda pod riadok v ktorom sa inštaluje klávesnica treba pridať riadok preform install_mouse(); Od toho okamihu máte k dispozícii premenné mouse_x a mouse_y, v ktorých budete mať uloženú aktuálnu pozíciu myši. Okrem toho je tu ešte premenná mouse_b v ktorej je ako v bitovom poli uložené, ktoré tlačidlo na myši je stlačené. Ak je nenenulové (mouse_b & 1), je stlačené ľavé tlačidlo. Ak (mouse_b & 2), je stlačené pravé tlačidlo a ak je nenulové (mouse_b & 4), je stlačené stredné tlačidlo (ak ho myš má).

S týmto vybavením už môžeme urobiť prvý nesmelý pokus o jednoduché kreslítko. Do hlavného kódu dajte nasledujúci kus programu:

   while( ! keypressed())
   {
      if (mouse_b & 1)
         putpixel(screen,mouse_x,mouse_y,makecol(255,255,0));
   }
Ten robí iba to, že kým nestlačíte niečo na klávesnici, opakovane zisťuje, či je stlačené ľavé tlačidlo na myši a ak áno, tak tam, kde je myš, spraví žltú bodku.

Úloha č.1 Vyskúšajte, pochopte.

Úloha č.2 Upravte program tak, aby keď je stlačené ľavé tlačidlo kreslil žlté bodky a keď je stlačené pravé tlačidlo kreslil červené bodky.

Úloha č.3 Upravte program tak, aby pri stlačení ľavého tlačidla kreslil súvislú čiaru. Urobte to tak, aby sa čiara prerušila, keď ľavé tlačidlo pustíte.

Úloha č.4 Upravte program tak, aby tam, kde kliknete, nakreslil slniečko (sprite sln1.tga).


next up previous
Next: Pokračovanie s myšou alebo Up: grafika Previous: Škriatkovia alebo "Obrázky s
Anino Belan
anino(at)smnd.sk