Trocha kódu pro začátečníky v GML
Psal jsem právě kousek celkem rutinního kódu a přestože ho zkušenější programátor vytvoří levou zadní, aniž by musel přemýšlet, napadlo mě: „Co bych před lety dal za kus česky komentovaného slušného kódu…„. A protože kód je to pěkný, tak se podělím.
Tak konečně prozradím, o co jde. Řekněme, že máme nějaký objekt, nasázeli jsme do roomu několik jeho instancí ( kdo neví, co je instance, může si to představit jako klony ). Teď chceme, aby po kliknutí na některou z instancí, se ta jedna nějak označila ( jako že je vybraná ). Po opětovném kliknutí na označenou se zase odznačí. Ale nechceme, aby jich bylo označeno víc než právě jedna, takže při označení jedné, musíme jakoukoli jinou označenou také odznačit. Já jsem to měl na takové lišty s textem. Objekt jenom jeden, texty různé a výběr klikáním.
Příprava:
Je zapotřebí vytvořit jeden sprite s dvěma snímky.
Snímek nula bude obrázek „nevybráno“ a
snímek jedna bude obrázek „vybráno“. – Nepoplést pořadí!
Může to být cokoli. Já měl destičku a destičku s bílým okrajem.
Dáme mu jméno třeba muj_sprite.
Vytvoříme nový objekt ( muj_objekt ) a přiřadíme mu muj_sprite.
Vytvoříme nový room a nasázíme do něj několik instancí objektu muj_objekt, třeba osm kousků.
Tím je příprava hotova.
Kód:
V objektu muj_objekt založíme událost Create, do ní dáme ikonu execute code, která umožní psát GML ( dále už budu psát jen „vložíme kód“ ). Ikonu naplníme následujícím kódem. Událost Create se spouští ve hře jen jednou a to hned na začátku, když instance vznikne. V našem případě prakticky hned po spuštění hry.
// za lomítky je vždy komentář, ten netřeba opisovat 🙂
//Pokud je na prvním řádku trojlomítko a text,
// objeví se ten text v popisce ikony.
Create:
///Začíná ve stavu „nevybráno“
vybrano=false; // true a false znamenají stav ANO/NE neboli 0/1.
//konec kódu Create – ano jenom tak málo. 🙂
Založíme událost Left Released se symbolem myši. Ta nastává vždy, když hráč klikne myší na danou instanci. Spustí se samozřejmě kód jen v té jedné ( kliknuté ) instanci.
Left Released:
///Přepnutí vybráno / nevybráno
//Tento rádoby složitý kód dělá to,
//že nastaví všechny instance ( příkaz with ) na nevybráno,
//v případě, že kliknutá instance byla dosud nevybraná
//a bude tedy po kliknutí jediná vybraná.
if vybrano==false { with (muj_objekt) { vybrano=false; } }
//Tento kód změní true na false a na naopak.
vybrano=!vybrano;
//konec kódu Left Released
Založíme událost Draw, která nastává mnohokrát za vteřinu a během ní se vykresluje sprite zvolený v objektu jako základní. My to teď změníme tím, že do Draw napíšeme vlastní kód.
Draw:
///Vykreslení snímku 0 nebo 1 podle vybráno-nevybráno.
//Využijeme toho, že true a false je v GML také 0 a 1
//a místo čísla snímku na druhé pozici dáme naše vybrano.
//Příkaz draw sprite prostě vykreslí sprite do polohy x,y
//což je místo, kde instance v místnosti leží.
//Tedy není třeba hledat nic číselně.
draw_sprite(sprite_index,vybrano,x,y);
//konec kódu Draw
No, hotovo a ani to nebolelo.
Stačí spustit a mělo by vše fungovat, jak má.
Tak si to užijte. 🙂
TomBen
PS: komu se nechce tvořit sprite, může si stáhnout tento:
68 odezev
+1, to je asi všechno co můžu napsat.
Pro začátečníky snad užitečné.
Nečekal jsem to, ale dověděl jsem se tam vlastně dost novinek. 🙂 Například ten zápis vybrano=!vybrano; jsem vůbec neznal.
A trojlomítko (respektive jak dosáhnout dané věci) mi dlouho vrtalo hlavou. 🙂
Za mě srozumitelné a obohacující. Takže super! 🙂
Díky. Přesně v tenhle efekt jsem doufal. I když je to jednoduché a začátečnicky srozumitelné, jsou tam dvě, tři věci, které začátečníci skoro nikdy nenapíší správně.
PS: trojlomítko v začátku scriptu zase dělá nápovědu do našeptávače
Teda ale Jindro, to ti chybí základní znalosti z programování! 😀
Jinak Tombene, tenhle řádek mi přijde pro úplné laiky matoucí:
Nebylo by lepší to rozepsat trošku víc, ať je to přehlednější a člověk pochopí, co závorky znamenají?
Jestli to tedy takhle v GML jde, už jsem to delší dobu neviděl. 🙂
Jj, takhle to v GML jde. 🙂 A ano, já se za programátora nepovažuji, takže základy mi zcela jistě chybí. 😀
Paradoxní je, že zrovna v GM to může být výhoda. Otevřít a spustit Lovce krys ve studiové verzi nebyl nejmenší problém, přestože původní Lovec krys vznikal snad ještě v sedmičkové verzi (mám uložené soubory v .GMD, pravda pak i soubory v .GMK a z doby před dvěma lety soubory v .GM81), ale fakt, že většina věcí byla v ikonkách znamenal, že se měnilo jen zadání souřadnic viewu, odmazala se úprava GM tabulky a jinak vlastně všechno běželo normálně. Dneska už se s ikonkami v GM nedá pracovat. Původní Lovec krys jich měl skutečně třeba 300+ v jednom eventu, což současné GM nezvládá (následkem čehož se v tom ještě hůř orientuje, když se to najednou celé cukne nebo na třicet vteřin zasekne), takže se to musí převést do kódu, ale stejně: otevřít bez problému hru starou deset let, to je parádní!
Určitě není problém v GML odřádkovat skoro cokoli, ale pokud se příkaz vejde rozumně na jeden řádek, tak to radši píšu takto. Když je totiž kódu hodně, je nakonec vždycky přehlednější skript, který nemusím moc rolovat. Myslím, že je to o zvyku. Někomu přijdou přehledné odřádkované ify, někomu ne. Někdo používá na všechno for, jiný while. Asi bych to tak nechal, pokud to vysloveně něčím neškodí.
Nepochopils mou myšlenku, já neříkám, že je špatně, abys to tak psal. Piš si to jak chceš, já bych to ostatně napsal kombinací „? : ;“ a LINQu na jeden řádek. 🙂 Šlo mi o to, pokud to má být tutoriál, aby to bylo co nejprimitivnější z hlediska pochopitelnosti. 🙂
V pohodě. On je ten řádek jediné složitější místo a popravdě by si zasloužil několik odstavců textu, abych vysvětlil podmínky, závorky a zacházení příkazu with s instancemi. Článek je bohužel jen takový výkřik do tmy. Logičtější by bylo psát řadu tutoriálů s postupně rostoucí složitostí.
Je to takové elementární… ale můžu napsat více podobných fičur do dalšího dílu svých postřehů 🙂
1accounting
dissertation writers https://professionaldissertationwriting.com/
dissertation presentation https://dissertationwritingcenter.com/
dissertation presentation https://dissertationhelpexpert.com/
uk dissertation writing help online https://accountingdissertationhelp.com/
writing service https://examplesofdissertation.com/
dissertation help for phd candidates https://writing-a-dissertation.net/
masters dissertation help https://businessdissertationhelp.com/
law dissertation writing service https://writingadissertationproposal.com/
ma dissertation writing service https://dissertationhelpspecialist.com/
hardrock online casino https://download-casino-slots.com/
pa online casino real money no deposit https://onlinecasinofortunes.com/
betfair online casino nj https://onlinecasinosdirectory.org/
party casino online nj https://9lineslotscasino.com/
casino online free bonus https://cybertimeonlinecasino.com/
firekeepers casino online https://casino-online-jackpot.com/
gta 5 online casino mystery prize how to claim https://onlineplayerscasino.com/
legal online casino https://ownonlinecasino.com/
liberty online casino https://all-online-casino-games.com/
riversweeps 777 online casino app https://casino8online.com/
best vpn for torrenting https://freevpnconnection.com/
best mac vpn https://free-vpn-proxy.com/
what is the best vpn service https://rsvpnorthvalley.com/
gay dating in chicago https://gay-singles-dating.com/
gay dating bakersfield https://gayedating.com/
gay dating machismo https://datinggayservices.com/
youwu666 https://freephotodating.com/
local singles in my area https://adult-singles-online-dating.com/
free dating chat https://online-internet-dating.net/
dating website free https://speedatingwebsites.com/
dating sites for seniors https://datingpersonalsonline.com/
raluka https://wowdatingsites.com/
free online dating chat https://zonlinedating.com/
1 dating sites https://onlinedatingservicesecrets.com/
live online casino real money https://onlinecasinos4me.com/
aladdin casino online https://online2casino.com/
online casino free play no deposit https://casinosonlinex.com/
gay pnp free chat denver https://newgaychat.com/
gay online chat sites https://gaychatcams.net/
gay grandpa video chat https://gaychatspots.com/
michigan gay chat https://gay-live-chat.net/
gay skype chat room https://chatcongays.com/
gay college chat rooms no cam needed https://gayphillychat.com/
free xxx gay interational chat rooms in johnstown, pa https://gaychatnorules.com/
westchester gay chat rooms https://gaymusclechatrooms.com/
gay video chat x4 https://free-gay-sex-chat.com/
chat room for gay chubs https://gayinteracialchat.com/
gay chat mature https://gaymanchatrooms.com/
buy psychology papers https://sociologypapershelp.com/
buying papers for college https://paperwritinghq.com/
custom handwriting paper https://writepapersformoney.com/
paper writing services for college students https://write-my-paper-for-me.org/
professional paper writer https://doyourpapersonline.com/
buying papers https://top100custompapernapkins.com/
paper writers https://researchpaperswriting.org/
paper writing help online https://buyessaypaperz.com/
college paper writing services https://mypaperwritinghelp.com/
write my business paper https://papercranewritingservices.com/
2entries