Vlastní funkce

Sem vkládejte editovatelné kusy kódu a tutoriály.
Odpovědět
Uživatelský avatar
Kešu
Příspěvky: 393
Registrován: srpen 6, 2011, 11:13 am
Facebook: https://www.facebook.com/kesucz
Bydliště: Rakovník
Kontaktovat uživatele:

Vlastní funkce

Příspěvek od Kešu » srpen 7, 2011, 4:17 pm

Vlastní funkce
V GM mimo existujících gml funkcí (např. show_message()), je taky možnost vytvořit funkce vlastní bez použití GEX. Je to velmi jednoduché a praktické. Díky této možnosti si můžete ušetřit obrovské množství práce! Funkce se vytvářejí v záložce Scripts.
Jméno skriptu = název funkce
[/size]

Funkce, co nevrací výsledek :
Pokud chceme například funkci, co vytvoří klikatelné tlačítko :
Vytvoříme tedy nový skript s názvem vytvor_tlacitko.
Budeme zadávat 9 parametrů :
x,y,x2,y2,text,font,akce po kliknutí,norm.barva,barva při najetí myší.

Kód: Vybrat vše

var xx,yy,xx2,yy2,txt,fnt,akce,b0,b1,b; //definujeme dočasné proměnné
xx=argument0; //hodnotu proměnné nastavíme z argumentu
yy=argument1;
xx2=argument2;
yy2=argument3;
txt=argument4;
fnt=argument5;
b0=argument6;
b1=argument7;
akce=argument8;

if (mouse_x>xx && mouse_x<xx2 && mouse_y<yy2 && mouse_y>yy) //pokud najedeme myší na tlačítko změní se jeho barva
{
b=b1;
}
else
{
b=b0;
}

draw_roundrect_color(xx+2,yy+2,xx2-2,yy2-2,b,b,0); //vykreslí tlačítko
for(i=2;i>0;i-=1)
{
draw_roundrect(xx+i,yy+i,xx2-i,yy2-i,1); //vykreslí rámeček
}

draw_set_font(fnt); 
draw_set_valign(fa_center);
draw_set_halign(fa_center);
draw_text_color(xx+(xx2-xx)/2,yy+(yy2-yy)/2,string(txt),c_black,c_black,c_black,c_black,1);
//vypíšeme text tlačítka
draw_set_valign(fa_left);
draw_set_halign(fa_top);

if (mouse_check_button_pressed(mb_left) && b=b1)
execute_string(string(akce)); //pokud na tlačítko klikneme, vykoná se akce
Pokud do draw dáte například vytvor_tlacitko(0,0,100,32,"Hrát!",tlacitko,c_aqua,c_yellow,"room_goto_next()");, vytvoří se vám takovéhle tlačítko -
Obrázek
Po kliknutí na něj vás hro přesune do další místnosti.

Funkce, co vrací výsledek :
Funkce, co převrátí slovo otoc_text.
Budeme zadávat jen jeden parametr - text.

Kód: Vybrat vše

var txt,pret;/definujeme dočasné proměnné

txt=argument0;
pret="";//nastavíme hodnoty
for(i=string_length(string(txt));i>0;i-=1)
{
pret+=string_copy(string(txt),i,1);
}//cyklem zapíšeme po znacích odzadu text do proměnné
return pret; //funkce nám vrátí převrácený text.
Příklad : show_message(otoc_text("Už umím GML!"));.

Jak vidíte, funkce jsou opravdu jednoduché. Pokud se je naučíte, získate velmi dobrou znalost.
Na případné chyby mě prosím upozorněte.
==================================================================
Funkce pro vypočítání obsahu kruhu od NicharaCZ

Příklad opravdu jednoduché vlastní funkce pro výpočet obsahu kruhu:
• Vytvoříme skript nahoře na liště podobně jako sprite
• Vložíme následující kód

Kód: Vybrat vše

return pi*power(argument0,2)
• Co je za return to skript vyhodí.. takže teď vyhodí výsledek obsahu kruhu..
• Power(argument0,2) je mocnina poloměru na druhou a "pi" je konstanta (3.141592..)
• Skript pojmenujeme obsah_kruhu
• A vložíme do create:

Kód: Vybrat vše

promenna=obsah_kruhu(30)
• A ve drawu vykreslíme:

Kód: Vybrat vše

draw_text(0,0,promenna)
• Spustíme a dostaneme obsah kruhu o poloměru 30 px..
Naposledy upravil(a) Kešu dne srpen 8, 2011, 12:22 pm, celkem upraveno 2 x.
Chytrákem od Ned 06. Pro 2009 22:29:46
▬▬▬▬▬▬▬▬▬▬▬▬▬ஜ۩۞۩ஜ▬▬▬▬▬▬▬▬▬▬▬▬
Still alive. - 15.4.2017
blokatt.net

Uživatelský avatar
Kešu
Příspěvky: 393
Registrován: srpen 6, 2011, 11:13 am
Facebook: https://www.facebook.com/kesucz
Bydliště: Rakovník
Kontaktovat uživatele:

Re: Vlastní funkce

Příspěvek od Kešu » srpen 8, 2011, 11:13 am

Opravdu nemáte nikdo nic na srdci? :mrgreen:
Chytrákem od Ned 06. Pro 2009 22:29:46
▬▬▬▬▬▬▬▬▬▬▬▬▬ஜ۩۞۩ஜ▬▬▬▬▬▬▬▬▬▬▬▬
Still alive. - 15.4.2017
blokatt.net

Uživatelský avatar
Loric
Příspěvky: 208
Registrován: srpen 6, 2011, 9:01 am

Re: Vlastní funkce

Příspěvek od Loric » srpen 8, 2011, 11:54 am

Proč tak složitou ukázku na vysvětlení skriptů v GM? :D Začátečníky to může odradit...

Uživatelský avatar
Nichar
Redaktor
Příspěvky: 435
Registrován: srpen 6, 2011, 1:51 pm
Facebook: http://www.facebook.com/nikolas.charalambidis
Bydliště: Praha

Re: Vlastní funkce

Příspěvek od Nichar » srpen 8, 2011, 12:16 pm

Příklad opravdu jednoduché vlastní funkce pro výpočet obsahu kruhu:
• Vytvoříme skript nahoře na liště podobně jako sprite
• Vložíme následující kód

Kód: Vybrat vše

return pi*power(argument0,2)
• Co je za return to skript vyhodí.. takže teď vyhodí výsledek obsahu kruhu..
• Power(argument0,2) je mocnina poloměru na druhou a "pi" je konstanta (3.141592..)
• Skript pojmenujeme obsah_kruhu
• A vložíme do create:

Kód: Vybrat vše

promenna=obsah_kruhu(30)
• A ve drawu vykreslíme:

Kód: Vybrat vše

draw_text(0,0,promenna)
• Spustíme a dostaneme obsah kruhu o poloměru 30 px..
The Scarecrow - 2. místo v prestižní soutěži, online highscore!
Symphony of good and evil: Finding the end - Soutěžní kousek (3. místo)
NWinAPI 0.2.gex | nMath.dll | nBeep.dll - Moje DLL a GEX
Vektorová galerie - Začátek mých vektorů

Uživatelský avatar
Kešu
Příspěvky: 393
Registrován: srpen 6, 2011, 11:13 am
Facebook: https://www.facebook.com/kesucz
Bydliště: Rakovník
Kontaktovat uživatele:

Re: Vlastní funkce

Příspěvek od Kešu » srpen 8, 2011, 12:21 pm

Nichar : Pěkný, dal jsem to do úvodního příspěvku. Díky! :3
Chytrákem od Ned 06. Pro 2009 22:29:46
▬▬▬▬▬▬▬▬▬▬▬▬▬ஜ۩۞۩ஜ▬▬▬▬▬▬▬▬▬▬▬▬
Still alive. - 15.4.2017
blokatt.net

Uživatelský avatar
Qipi
Příspěvky: 133
Registrován: srpen 6, 2011, 12:14 pm
Facebook: http://www.facebook.com/?ref=h

Re: Vlastní funkce

Příspěvek od Qipi » srpen 8, 2011, 12:24 pm

Celkem pěkný a jednoduchý :D .. ale u mě se to stejně neuchytí , pře sprity mi to přijde o dost lehčí .. :D
Kontaktujte mě na skype qipik2005. Rád poradím s čímkoliv :).

Uživatelský avatar
Loric
Příspěvky: 208
Registrován: srpen 6, 2011, 9:01 am

Re: Vlastní funkce

Příspěvek od Loric » srpen 8, 2011, 1:47 pm

Qipi píše:Celkem pěkný a jednoduchý :D .. ale u mě se to stejně neuchytí , pře sprity mi to přijde o dost lehčí .. :D
aje to tu.. Qipi nepochopil o co tu jde :D Opravdu by tam měl být jednodušší příklad, třeba ten Nicharův

Uživatelský avatar
kost
Příspěvky: 265
Registrován: srpen 5, 2011, 10:48 pm

Re: Vlastní funkce

Příspěvek od kost » srpen 8, 2011, 2:06 pm

Qipi: skripty jsou na to, aby si nemusel neustále psát jeden kód.

Uživatelský avatar
Pelpet
Příspěvky: 734
Registrován: srpen 6, 2011, 12:03 am
Bydliště: Vsetín
Kontaktovat uživatele:

Re: Vlastní funkce

Příspěvek od Pelpet » srpen 8, 2011, 2:19 pm

Ještě k těm scriptům by se možná hodilo zmínit, že script je schopen spustit sám sebe. To se dá v mnohá případech velmi dobře využít.
Obrázek Sunken Bridge | Obrázek Moje GM tutoriály | Come on son, let's go outside play Catch the Exception!

Uživatelský avatar
Mikos
Příspěvky: 233
Registrován: srpen 6, 2011, 12:34 am

Re: Vlastní funkce

Příspěvek od Mikos » srpen 8, 2011, 2:41 pm

Rekurzívna funkcia

Funkcia v GML môže byť aj rekurzívna. Rekurzívna funkcia vyzerá skoro tak isto ako obyčajná funkcia. Napríklad funkcia na výpočet faktoriálu.

:gmico107: scr_faktorial

Kód: Vybrat vše

var n;
n = argument0;

if(n <= 0) {
    return(1);
} else {
    return(n * scr_faktorial(n-1));
}
Keď toto zavoláme napríklad v event-e Draw pomocou funkcie draw_text();

:gmico129: Draw

Kód: Vybrat vše

draw_text(x,y,scr_faktorial(5));
Tak výsledok bude 120 čiže faktoriál od čísla 5!

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 1 host