IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

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

 

Všetky články v sekcii
Game maker - Ostatné
Článok pre vás napísal Garrom Orc Shaman
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Autor zabýval pasní her v nástroji GameMaker, poté Unity3D a teď se zabývá GoDot enginem. Dokud tu někde nebude kategorie "GoDot", autor nejspíše psát nebude.
Aktivity