next up previous
Next: Opakovanie grafiky alebo "Picasso Up: grafika Previous: Jemný úvod do myšovania

Pokračovanie s myšou alebo "Hlodavec, nezavadzaj!"

V predošlej lekcii sme sa naučili, ako pracovať s myšou. Vieme zistiť jej pozíciu aj to, či sú na nej stlačené niektoré tlačidlá. Ale stále to malo jednu nevýhodu. Myš nebolo vidieť. Ona klasická malá šipka, na ktorú sme zvyknutí, po obrazovke nebehala a pozíciu myši sme mohli iba hádať.

Ak chceme, aby myš bolo vidieť, musíme urobiť dve veci. Za prvé musíme nainštalovať modul timer. Na čo je taký modul dobrý sa dozvieme v niektorej z ďalších lekcií. Zatiaľ len toľko, že musí byť nainštalovaný. Spravíme to tak, že tam, kde sme inštalovali ostatné veci pridáme riadok install_timer();[*]

Druhá vec ktorú musíme dodržať je, že vždy predtým, než na obrazovku budeme niečo kresliť, musíme myš zhasnúť, pretože inak nám bude robiť na obrazovku šmuhy. Hneď ako dokresíme samozrejme myši povieme, aby sa opäť objavila. Myš sa objavuje na obarzovke príkazom show_mouse(screen); a zhasína sa príkazom show_mouse(NULL); Na ukážku spravíme program, ktorý bude "razítkovať" slniečka, rovnaký ako v predošlej lekcii, ale s viditeľnou myšou. V deklaráciach bude

 1   BITMAP* obrazocek;
a v hlavnom kóde
 2   obrazocek = load_bitmap("sln1.tga",NULL);
 3   show_mouse(screen);
 4   
 5   while( ! keypressed())
 6   {
 7      if (mouse_b & 1)
 8      {
 9         show_mouse(NULL); 
10         draw_sprite(screen,obrazocek,mouse_x-50,mouse_y-50);
11         show_mouse(screen); 
12      }
13   }
V cykle while sa kontroluje, či je stlačené ľavé tlačidlo na myši a ak áno, myš sa skryje, nakreslí sa slniečko a myš sa znova zapne. Celý tento cyklus sa opakuje až kým niekto nestlačí klávesu na klávesnici (a výraz (! keypressed()) tak nadobudne hodnotu "nepravda"). Mimochodom -- prečo sú vo funkcii draw_sprite súradnice pozície myši zmenšené o päťdesiat?

Iste ste už pracovali s viacerými programami, v ktorých sa kurzor myši rôzne menil. Aj v allegre môžete dať myši tvar ľubovoľného spritu, ktorý si vyrobíte. Slúži na to funkcia set_mouse_sprite. V prípade, že kurzor myši zmeníte, je dôležité určiť, ktorý jeho bod je aktívny. (Aktívny bod je ten, ktorého pozícia sa ukladá do premenných mouse_x a mouse_y. Pri klasickom tvare myši je to koniec šipky.) Aktívny bod sa určuje s pomocou funkcie set_mouse_sprite_focus. Ako parametre sa použijú súradnice aktívneho bodu na myšovom sprite. Ak túto funkciu nepoužijete, za aktívny sa pokladá ľavý horný roh myšového spritu -- aktívny bod je nastavený na [0,0].

Ak teda chceme, aby nám po obrazovke miesto klasickej šipky pobehovalo slniečko a odtlačilo sa tam, kde klikneme, musíme medzi riadky 2 a 3 pridať nasledovný kód:

   set_mouse_sprite(obrazocek);
   set_mouse_sprite_focus(50,50);



Úloha č.1 Vyskúšajte a pochopte obe ukážky (s obyčajnou myšou aj so slniečkom).

Úloha č.2 Napíšte program (s viditeľnou myšou), ktorý na mieste kliknutia nakreslí kružnicu s polomerom 30. (Na kreslenie kružníc sa používa funkcia circle(bitmapa,x,y,polomer,farba).)

Úloha č.3 Spravte program s viditeľnou myšou, ktorý v prípade, že je stlačené ľavé tlačidlo na myši, nakreslí úsečku z bodu [0,0] do bodu, kde sa práve myš nachádza. Skúste meniť farbu úsečky podľa pozície myši.

Úloha č.4 (ťažká) Upravte program so slniečkom z úlohy č.1 tak, aby na obrazovke zostal vždy len posledný odtlačok slniečka.


next up previous
Next: Opakovanie grafiky alebo "Picasso Up: grafika Previous: Jemný úvod do myšovania
Anino Belan anino(at)smnd.sk