Ako na tlačidlá v game maker
Zdravím, ja som DrMrkev a všetkých vás vítam u môjho tutoriálu.
Úvod
Množstvu ľuďom, čo robia v Game Makeru, robí problém interakcie pomocou tlačidiel. Veľa z vás to rieši tak, že pre každé tlačidlo majú objekt zvlášť, čo je len tak mimochodom škaredo zlé riešenie. V tomto tutoriále vás naučím ako môžete mať aj milión tlačidiel a stále iba jeden objekt.
Teória
Budeme mať skript, ktorý bude vykresľovať tlačidlo a
vracať true
, ak bude myš na tlačidle. Tlačidlo samotné bude
sprite s dvoma snímkami, jeden pre tlačidlo v pokoji a druhý sa zobrazí, ak
je myš na tlačidle. Náš skript bude vracať true, pokiaľ je myš na
tlačidle z toho dôvodu, že tento skript je v podstate kontrola súradníc,
čo sa dá použiť kdekoľvek (napr. Máte tlačidlo s symbolom
"?" A pokiaľ naň nabehnete, ukáže sa text). Keby vracal
true pri kliknutí, tak by tak široké využitie nemal.
Príprava
Pripravíme si jeden skript ("scrButton"), jeden sprite s dvoma snímkami ("sButton") a jeden objekt ("oButtons").
Pozn .: Na sButton nenastavujte origin (pôvod), urobiť to môžete, ale vzhľadom k použitým funkciám je to úplne zbytočné. Prvá snímka u sButton bude tlačidlo v pokoji a druhý bude tlačidlo, ak je nie ňom myš.
Skript
Náš skript bude vykresľovať tlačidlo a kontrolovať či je myš na tlačidle, ak áno vráti true:
///scrButton(x, y, spr, scl) ret = false; h = (sprite_get_height(argument2) * argument3); w = (sprite_get_width(argument2) * argument3);
Prvý riadok je nápoveda. Pri písaní kódu sa bude zobrazovať v dolnej časti okna. Ret je návratová hodnota, "h" a "w" sú šírka a výška obrázku, do ktorej je pripočítané roztiahnutie (onen argument3).
if (mouse_x > argument0 && mouse_y > argument1 && mouse_x < (argument0 + w) && mouse_y < (argument1 + h)) { draw_sprite_stretched(argument2,1,argument0,argument1,w,h); ret = true; }
Podmienka môže vyzerať zložito, ale v princípe je to veľmi jednoduché.
Kontrolujeme, či sú x a y súradnice
väčšie, než ľavý horný roh tlačidla a zároveň menšie
ako pravý dolný roh tlačidla.
draw_sprite_stretched
vykreslí sprite s určitou výškou a
šírkou, a ak je podmienka splnená, nastaví peru na true.
else { draw_sprite_stretched(argument2,0,argument0,argument1,w,h); ret = false; }
Ak podmienka splnená nie je, vykreslíme sprite s prvou snímkou a peru nastavíme na false.
return ret;
Tento riadok nám vráti peru ako návratovú hodnotu, čo je jediný dôvod, prečo tu je.
Týmto je náš skript hotový, teraz vyzerá takto
///scrButton(x,y,spr,scl) ret = false; h = (sprite_get_height(argument2) * argument3); w = (sprite_get_width(argument2) * argument3); if (mouse_x > argument0 && mouse_y > argument1 && mouse_x < (argument0 + w) && mouse_y < (argument1 + h)) { draw_sprite_stretched(argument2,1,argument0,argument1,w,h); ret = true; } else { draw_sprite_stretched(argument2,0,argument0,argument1,w,h); ret = false; } return ret;
Objekt
Teraz sa presunieme do oButtons, kde budeme mať naprogramované naše tlačidla. Bude to na dva spôsoby. V prvom bude tlačidlo stáť na mieste, medzitým čo v druhom bude vyvolané kliknutím pravého tlačidla myši.
Statické tlačidlo
--Create Event-- hover = false;
Premenná hover nám hovorí, či je myš na tlačidle. Bude sa rovnať návratovej hodnote nášho tlačidla (scrButton).
--Draw Event-- hover = scrButton(100,100,sButt1a,2);
Pomocou nášho skriptu vykreslíme tlačidlo a návratovú hodnotu uložíme do premennej hover.
Pozn .: Funkcia fungujú, aj keď sú použité ako hodnota alebo podmienka. V podmienke by to fungovalo tiež a skript je v podstate nami vytvorená funkcie.
--Step Event-- if (hover == true && mouse_check_button(mb_left)) { // činnost tlačítka, pro ukázku zvedneme skóre score = score++; }
Tu reagujeme na stlačenie tlačidla a podmienka kontroluje, či je myš na tlačidle a zároveň je stlačené ľavé tlačidlo myši. V bloku tejto podmienky môže byť takmer čokoľvek, čo sa má vykonať pri stlačení tlačidla, pre ukážku sme zdvihli skóre o 1.
Popup (vyskakovacie) tlačidlo
Toto tlačidlo je zobrazené, ak hráč klikne pravým tlačidlom kamkoľvek a opäť schované ak klikne inam, než na tlačidlo, z čoho vyplýva, že bude o niečo zložitejšie.
--Create Event-- hover = false mX = 0 mY = 0 sel = false
Premenná hover nám hovorí, či je myš na tlačidle. Bude sa rovnať návratovej hodnote nášho tlačidla (scrButton). Premenné Mx a My sú súradnice vyskakovacieho tlačidla. Premenná sel určuje, či je tlačidlo zobrazené (sel je skratka "selected", eng. Vybrané).
--Step Event-- if (mouse_check_button_pressed(mb_right)) // Blok1 { sel = true; mX = mouse_x; mY = mouse_y; } if (mouse_check_button_pressed(mb_left) && hover = false) // Blok2 { sel = false; } if (hover == true && mouse_check_button(mb_left)) // Blok3 { score = score++; }
Blok1 kontroluje, či bolo stlačené pravé tlačidlo. Ak áno, je premenná sel nastavená na true a poměnné mx a my sú nastavené na súradnice myši. V Bloku2 si strážime, či hráč klikol inam než na tlačidlo, v tom prípade tlačidlo zatvoríme. Blok3 zaisťuje samotnú interakciu, opäť sme použili príklad sa zdvihnutím skóre (avšak rovnako ako u statického tlačidlá tu môže byť čokoľvek čo tlačidlo vykonáva).
--Draw Event-- if (sel == true) { hover = scrButton(mX,mY,sButton,2); }
Ak je premenná sel nastavená na true, je tlačidlo aktívne a vykresľovanie. Návratovú hodnotu opäť ukladáme do premennej hover, pretože s ňou pracujeme v Step Eventu. Tlačidlo vykresľujú na mx a my, pretože keby sme zadali priamo súradnice myši, tlačidlo by myš nasledovalo, čo ale my nechceme.
Gratulujem. Práve ste sa naučili, ako používať tlačidlá v Game Makeru, bez toho aby ste robili nejaká zverstvá (ako napríklad objekt pre každé tlačidlo). S trochou kreativity to môžete dotiahnuť ešte ďalej a urobiť na tomto základe treba check box alebo slider. Osobne dúfam, že som vás dnes naučil niečo užitočného.
DrMrkev sa so všetkými lúči a praje vám krásny zvyšok dňa.
Stiahnuť
Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami
Stiahnuté 23x (2.11 MB)
Aplikácia je vrátane zdrojových kódov v jazyku GameMaker