Instance variables
Instance variables (proměnná instancí) nám umožní, aby si každá příšera skladovala svoje vlastní životy. Proměnná (variable) je jednoduše hodnota, která se může měnit a jsou zvlášť pro každou instanci daného objektu. Odtud to jméno, instance variable.
Přidejme tedy instnce variable životy naší příšeře. Označ příšeru. Zobrazí se její vlastnosti v properties bar. Klikni na Add/edit (přidej/uprav) u Edit variables.
Vyskočí dialog podobný tomu s Vlastnostmi (Behaviours) s tím rozdílem, že zde můžeme přidávat nebo měnit Instance variables objektů. Klepni na zelené tlačítko Add (Přidat) pro její přidání.
V následujícím okně napiš život ke jménu, ponech Type (Druh) jako Number (číslo) a u Initial value* (Výchozí hodnota) napiš 5. Tímto začne každá příšera na pěti životech. Kdykoli budou postřeleny, odečtem 1 od proměnné život a když bude život roven nule, příšera bude zničena.
Klikni na OK, až budeš hotov. Pozoruj, že proměnná se teď zobrazuje v dialogu Instance variables a v properties příšery také. (V properties lze rychle změnit hodnotu proměnné, ale pro přidání nebo odebrání musíš kliknout na Add/Edit.)
Změna podmínky
Skoč zpět k tabulce událostí (event sheet). Teďka ničíme příšeru, jakmile je trefí patrona. Změníme me to tak, aby se pouze odečetla 1 od jejího života.
Najdi podmínku, ve které je psáno: Patrona - on collision with Příšera. Jak vidíš, tak tu máme akci "destroy Příšera". Vyměňme to s "Subtract 1 from život". Klikni levým na akci "destroy příšera" a zvol Replace (Nahradit).
Zobrazí se stejné okno jako pro přidávání nové akce, ale tentokrát tato akce nahradí akci "destroy Příšera". Zvol Příšera -> Subtract from (v kategorii Instance variable) -> Instance variable Život a napiš 1 pro value (hodnota). Klikni na Done (Hotovo). Akce by teď měla vypadat takhle:
Teď bude postřelené příšeře ubrán 1 život a patrona vybuchne, ale nevytvořili jsme podmínku pro zničení příšeru, když bude její život na nule. Přidej novou podmínku:
Okolnost: Příšera -> Compare (Porovnej) instance variable -> Život, Less or equal (Menší nebo roven), 0
Akce: Příšera -> Spawn another object -> Výbuch, layer 1
Akce: Příšera -> Destroy
Proč "Menší nebo roven 0" a ne raději "roven 0"? Představ si, že bys přidal jinou silnější zbraň, která ubírá příšerám 2 životy. Jak by jsi střílel do příšery , její život by klesal následovně: 5, 3, 1, -1, -3... Nedošlo k tomu, aby se životy rovnaly nule, takže by nikdy nezemřela! Tudíž je dobře použít "menší nebo roven" pro otestování, jestli někdo nepřišel o všechny životy.
Spusť hru. Teď musíš příšeru střelit 5 krát pro její zabití!
Zapisování skóre
Přídáme skóre, aby hráč věděl, jak si vede. Budem pro to potřebovat další proměnnou. Možná, že tě zrovna napadlo "Přidáme Instance variable u hráče, která bude reprezentovat skóre!". Na první pohled to nezní špatně, ale pamatuj, že hodnota je ukládána "v" objektu. Pokud tu není, žádná instance, není ani žádná proměnná! Takže jakmile by byl zničen hráč, nemohli bychom říct, jaké bylo jeho skóre, protože bylo zničeno s hráčem.
Místo toho můžeme využít Hromadnou proměnnou (global variable). Jako u instance variable, hromadná proměnná v sobě ukládá text nebo číslo. Každá proměnná může uchovávat jedno číslo nebo jednu část textu. Hromadné proměnné jsou uchovávány pro celou hru, pro všechny layouty - proktické, kdybychom chtěli přidat další úrovně.
Klikni pravým někde na volné místo v tabulce událostí a zvol Add Global variable.
Zvol Skóre jako její jméno. Ostatní přednastavená pole nám vyhovují, bude to číslo začínající na nule.
Hromadná proměnná se teď zobrazí v tabulce událostí. Je v této tabulce událostí, ale má přístup ke všem tabulkám událostí ve jakémkoli layoutu.
Poznámka: Jsou zde též místní (local) proměnné, které může využívat menší škála podmínek, ale tím se teď nemusíme zabývat.
Dáme hráči důvot zabýjet příšery. V naší podmínce "Příšera: život less or equel 0" přidej akci, System -> Add to (u Global & local variables) -> Skóre, value 1. Podmínka by měla teď vypadat takto:
Teď má hráč skóre, které se zvýší o 1 za každou zabitou příšeru - ale své skóre nevidí! Ukážeme mu ho objektem Text.