Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Jak na tlačítka v GameMaker

Zdravím, já jsem DrMrkev a všechny vás vítám u mého tutoriálu.

Úvod

Spoustě lidem, co dělají v Game Makeru, dělá problém interakce pomocí tlačítek. Spousta z vás to řeší tak, že pro každé tlačítko mají objekt zvlášť, což je jen tak mimochodem šeredně špatné řešení. V tomto tutoriálu vás naučím jak můžete mít i milion tlačítek a stále pouze jediný objekt.

Teorie

Budeme mít skript, který bude vykreslovat tlačítko a vracet true, pokud bude myš na tlačítku. Tlačítko samotné bude sprite s dvěma snímky, jeden pro tlačítko v klidu a druhý se zobrazí, pokud je myš na tlačítku. Náš skript bude vracet true, pokud je myš na tlačítku z toho důvodu, že tento skript je v podstatě kontrola souřadnic, což se dá použít kdekoliv (např. Máte tlačítko s symbolem „?“ a pokud na něj najedete, ukáže se text). Kdyby vracel true při kliknutí, tak by tak široké využití neměl.

Příprava

Připravíme si jeden skript („scrButton“), jeden sprite s dvěma snímky („sButton“) a jeden objekt („oButtons“).

Pozn.: Na sButton nenastavujte origin (původ), udělat to můžete, ale vzhledem k použitým funkcím je to naprosto zbytečné. První snímek u sButton bude tlačítko v klidu a druhý bude tlačítko, pokud je ne něm myš.

Skript

Náš skript bude vykreslovat tlačítko a kontrolovat zda je myš na tlačítku, pokud ano vrátí true:

///scrButton(x, y, spr, scl)
ret = false;
h = (sprite_get_height(argument2) * argument3);
w = (sprite_get_width(argument2) * argument3);

První řádek je nápověda. Při psaní kódu se bude zobrazovat v dolní části okna. Ret je návratová hodnota, „h“ a „w“ jsou šířka a výška obrázku, do které je připočítáno roztažení (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;
}

Podmínka může vypadat složitě, ale v principu je to velice jednoduché. Kontrolujeme, zda jsou x a y souřadnice větší, než levý horní roh tlačítka a zároveň menší než pravý dolní roh tlačítka. draw_sprite_stretched vykreslí sprite s určitou výškou a šířkou, a pokud je podmínka splněna, nastaví ret na true.

else
{
    draw_sprite_stretched(argument2,0,argument0,argument1,w,h);
    ret = false;
}

Pokud podmínka splněna není, vykreslíme sprite s prvním snímkem a ret nastavíme na false.

return ret;

Tento řádek nám vrátí ret jako návratovou hodnotu, což je jediný důvod, proč tu je.

Tímto je náš skript hotový, nyní vypadá 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

Nyní se přesuneme do oButtons, kde budeme mít naprogramovaná naše tlačítka. Bude to na dva způsoby. V prvním bude tlačítko stát na místě, mezitím co v druhém bude vyvoláno kliknutím pravého tlačítka myši.

Statické tlačítko

--Create Event--
hover = false;

Proměnná hover nám říká, zda je myš na tlačítku. Bude se rovnat návratové hodnotě našeho tlačítka (scrButton).

--Draw Event--
hover = scrButton(100,100,sButt1a,2);

Pomocí našeho skriptu vykreslíme tlačítko a návratovou hodnotu uložíme do proměnné hover.

Pozn.: Funkce fungují, i když jsou použity jako hodnota nebo podmínka. V podmínce by to fungovalo také a skript je v podstatě námi vytvořená funkce.

--Step Event--
if (hover == true && mouse_check_button(mb_left))
{
    // činnost tlačítka, pro ukázku zvedneme skóre
    score = score++;
}

Zde reagujeme na zmáčknutí tlačítka a podmínka kontroluje, zda je myš na tlačítku a zároveň je stisknuto levé tlačítko myši. V bloku této podmínky může být takřka cokoli, co se má vykonat při stisku tlačítka, pro ukázku jsme zvedli skóre o 1.

PopUp (vyskakovací) tlačítko

Toto tlačítko je zobrazeno, pokud hráč klikne pravým tlačítkem kamkoli a opět schováno pokud klikne jinam, než na tlačítko, z čehož plyne, že bude o něco složitější.

--Create Event--
hover = false
mX = 0
mY = 0
sel = false

Proměnná hover nám říká, zda je myš na tlačítku. Bude se rovnat návratové hodnotě našeho tlačítka (scrButton). Proměnné mX a mY jsou souřadnice vyskakovacího tlačítka. Proměnná sel určuje, zda je tlačítko zobrazeno (sel je zkratka „selected“, eng. vybráno).

--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, zda bylo zmáčknuto pravé tlačítko. Pokud ano, je proměnná sel nastavena na true a poměnné mX a mY jsou nastaveny na souřadnice myši. V Bloku2 si hlídáme, zda hráč klikl jinam než na tlačítko, v tom případě tlačítko zavřeme. Blok3 zajišťuje samotnou interakci, opět jsme použili příklad se zvednutím skóre (ovšem stejně jako u statického tlačítka zde může být cokoli co tlačítko vykonává).

--Draw Event--
if (sel == true)
{
    hover = scrButton(mX,mY,sButton,2);
}

Pokud je proměnná sel nastavena na true, je tlačítko aktivní a vykreslováno. Návratovou hodnotu opět ukládáme do proměnné hover, protože s ní pracujeme v Step Eventu. Tlačítko vykreslujeme na mX a mY, protože kdybychom zadali přímo souřadnice myši, tlačítko by myš následovalo, což ale my nechceme.

Gratuluji. Právě jste se naučily, jak používat tlačítka v Game Makeru, aniž byste dělali nějaká zvěrstva (jako například objekt pro každé tlačítko). S trochou kreativity to můžete dotáhnout ještě dál a udělat na tomto základě třeba check box nebo slider. Osobně doufám, že jsem vás dnes naučil něco užitečného.

DrMrkev se se všemi loučí a přeje vám krásný zbytek dne.


 

Stáhnout

Stažením následujícího souboru souhlasíš s licenčními podmínkami

Staženo 23x (2.11 MB)
Aplikace je včetně zdrojových kódů v jazyce GameMaker

 

Všechny články v sekci
GameMaker - Ostatní
Článek pro vás napsal Garrom Orc Shaman
Avatar
Uživatelské hodnocení:
2 hlasů
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