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:muj_sprite_strip2