|
[Grafika]
[WebTip]
[Fotografování]
[Galerie]
[MujMac]
[Printing]
|
|||||||||
|
|
||||||||||
|
|
|||||||||
|
Opět Vás vítám u seriálu o Allegru. Již brzy budeme schopni vytvořit nějakou tu hru, která už bude hratelná, ale každá hra se nějak ovládá. Většinou pomocí klávesnice a myši. My jsme se prozatím seznamovali s grafikou a grafickým výstupem v Allegru. Dneska si ale konečně ukážeme jaké možnosti nám allegro nabízí na vstupní zařízení jako jsou myš a klávesnice. Poznámka k nové verzi Allegra: Na konci programu už nemusíme psát funkci allegro_exit(); a za konečnou závorkou funkce main() zapíšeme makro END_OF_MAIN(); Tedy malá ukázka:
Od teď budeme psát programy tímto stylem. Samozřejmě, aby byl program funkční museli bychom přiincludovat soubor allegro.h.
KlávesniceKdyž chceme začít používat v Allegru klávesnici či jiná vstupní zařízení musíme to Allegru nějak říct. K tomu slouží funkce: int install_keyboard(); Ta nám zařídí inicializaci klávesnice a několika proměnných. ( Po této inicializaci už bychom neměli používat standardní funkce jazyka C pro obsluhu klávesnice. Chovají se občas divně. ) Jelikož je řeč o klávesnici tak se budu věnovat pouze klávesnici ( pak zjistíte, že si jsou s myší podobné ). Tedy tato funkce nám inicializuje proměnnou key, což je jednorozměrné pole charů o 128 prvcích. Hodnota jednotlivých prvků je 0, pokud není zmáčknuta příslušná klávesa a -1 pokud je klávesa zmáčknuta. Jak poznáme která klávesa je a která není zmáčknuta? No je to jednoduché. Allegro nám dává k dispozici přes sto definic. Pro každou klávesu minimálně jednu. Definice na rozdíl o proměnných jsou psána velkými písmeny např.: KEY_ENTER. Tedy stylem: nejdříve slovíčko KEY pak podtržítko a pak příslušný název klávesy na klávesnici. V manuálu k Allegru jsou k dispozici tyto možnosti:
A jak se to používá? Naprosto jednoduše. Jméno definice použijeme jako index v poli charů key. Tedy například:
A tak to podobně funguje i s dalšími klávesami. Jako index stačí dosadit jednu z výše uvedených definic a tak si s přehledem "odchytit" stavy kláves. Více si ukážeme na příkladu na konci této kapitoly. MyšSe v poslední době stává čím dál tím více standardem v herním průmyslu. Pomalu už nevyjde nová hra, která by nepodporovala ovládání (alespoň z části) pomocí myši. My se proto taky seznámíme s tímto (dalo by se říci dnešním standardem IBM PC) zařízením více. Nebo spíše s jeho odchytáváním událostí ( klikáním, pohybem atd ).Tak jako u klávesnice existuje funkce pro zapnutí tak samozřejmě tomu je tak i u myši. Slouží k tomu funkce: int install_mouse(); Pokud proběhne vše v pořádku vrací funkce číslo různé od -1 a při chybě teda vrací -1. (Pokud chceme myš vypnou slouží k tomu funkce void remove_mouse(); ) Tato funkce nám inicializuje několik proměnných. Jako první bych uvedl tyto: extern volatile int mouse_x; extern volatile int mouse_y; extern volatile int mouse_z; extern volatile int mouse_b; extern volatile int mouse_pos; První dvě proměnné jsou jasné. Jsou to X-ová a Y-ová souřadnice myši. mouse_pos uchovvá taky souřadnice a to tak, že v horním slově (wordu) souřadnici X a v dolním slově (wordu) souřadnici Y ( upozorňuji na to, že velikost sizeof(int) jsou 4 byty ). mouse_z nám udává polohu scrolovacího kolečka na myši. Mě se to ale bohužel nepovedlo rozchodit. A jako poslední nejzajímavější je proměnná mouse_b, která nám v sobě uchovává stavy tlačítek. Pokud je 0. bit nastaven na jedna je stisknuté levé tlačítko, pokud je 1. bit nastaven na jedna je stisknuté pravé tlačítko a pokud je 2. bit nastaven na jedna je stisknuté prostřední tlačítko. Pro zjištění je asi nejjednodušší použít logický bitový součin. Např.:
Tyto informace jsou pro nás bohatě dostačující co se týče pozice a události tlačítek, ale teď k tomu co je ještě potřeba zavolat, aby se nám kurzor objevil na obrazovce. K tomu slouží funkce: void show_mouse(BITMAP *bmp); která jako parametr bere BITMAPu na kterou si přejeme kurzor myši zobrazit. Volání může vypadat například takto: show_mouse(screen); Opak této funkce, tedy pro opětovné skrytí kurzoru je funkce: show_mouse(NULL); A teď ještě k dalším funkcím v Allegru pro práci s myší. Nastavení pozice kurzoru na námi zadané souřadnice: void position_mouse(int x, int y); Nastavení citlivosti myši: void set_mouse_speed(int xspeed, int yspeed); Jako parametry jsou hodnoty zvlášť pro x-ovou a y-ovou souřadnici. Standardně je pro obě souřadnice hodnota 2. Vyšší hodnota znamená vyšší citlivost ( tedy pro přemístění kurzoru ujedeme větší vzdálenost na podložce ) a nižší hodnota znamená přesný opak. Rozsah myši si můžeme taky navolit podle nás: void set_mouse_range(int x1, int y1, int x2, int y2); Této funkci dáme parametry souřadnice obdélníku v jakém se může naše myš ( nebo spíše kurzor ) pohybovat. Pokud tedy chcete např., aby se kurzor pohyboval pouze v horní polovině obrazovky dosáhnete toho voláním této funkce s těmito parametry: set_mouse_range(0, 0, (SCREEN_W / 2) - 1, (SCREEN_H / 2) - 1); A nyní ještě něco ke kurzorům To znamená např.: jak si změním kurzor na svůj => třeba na křížek a taky jak si změním v kurzoru pozici, která mi udává souřadnice. Je blbý, aby křížek reagoval na levý horní roh :), když má reagovat na prostředek. Ke změně slouží funkce: void set_mouse_sprite(BITMAP *sprite); Tato funkce bere jako parametr BITMAPu, kterou si můžete nakreslit v nějakém graf. programu anebo si ji jednoduše namalovat pomocí Allegra. A reakci kurzoru nastavíme pomocí: void set_mouse_sprite_focus(int x, int y); Jako parametry máme samozřejmě pozici v naší BITMAPě. Defaultní nastavení je 0, 0. Dneska jsme si toho ukázali hodně z toho co Allegro nabízí. Pokud chcete vědět ještě více není nic jednoduššího než se podívat do manuálu Allegra. Anebo si taky můžete prohlédnout ukázkové programy v Allegru. Příklad:Pro lepší pochopení si uvedeme opětovný příklad na dnění funkce.Ovládání: R - zvětšuje intenzitu červené barvy max. 255 G - zvětšuje intenzitu zelené barvy max. 255 B - zvětšuje intenzitu modré barvy max. 255 ESC nebo pravé tlačítko myší - konec programu Levé tlačítko - kreslí buď tečky nebo lomenou čáru Enter - mění druh kreslení - viz levé tlačítko Poznámka:
Minule jsem se zmínil, že si uděláme "velký" příklad, který bude obsahovat vše co jsme se doposud naučili, ale vzhledem k rozsáhlosti dnešního článku jsem se rozhodl vyhradit pro to nový díl o
Allegru, který ponese hrdě už číslo 6. Tedy příště se těšte už na
větší aplikaci.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||