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é 24x (2.11 MB)
Aplikácia je vrátane zdrojových kódov v jazyku GameMaker
