Pád a skok

V této lekci naučíme panáčka dalším pohybům - padání a skoku, jako obvykle je k dispozici .swf ukázka .

Nejprve padání:

- do klipu akce_1 přidáme do onClipEvent(load) další dvě proměnné, vg bude zrychlovat pád a skaceme bude hlídat, jestli skáčeme, nebo ne:

vg = 0; // gravitacni rychlost dolu
skaceme = 0; // uz zase neskaceme

- nyní přejdeme do akcí klipu plosina a smažeme původní test kolize. Funkce hitTest totiž kontroluje prostě dotyk dvou objektů, takže panáček by z plošiny nespadl, dokud by se jí dotýkal třebas jen okrajem. Proto podmínku doplníme o kontrolu toho, jestli je nad plošinou střed panáčka, není-li potom bude padat (za chvíli :-) ).

onClipEvent(enterFrame)
{
// Jestlize hrac 1 stoji na plosine
if(this.hitTest(_root.panak1) && ( _root.panak1._x > (_x - _width/2)) && ( _root.panak1._x < (_x + _width/2))) // jestlize stojime na plosine a neskaceme a nas STRED je nad plosinou
{
if (_root.akce_1.dopadl)
{_root.akce_1.dopadl = 0; // hrac uz dopadl, takze dopadl uvedeme na false, aby se vsechny tyto akce v tomto bloku provedly az zase pri pristim
_root.panak1._y = this._y - _root.panak1._height/2; // vyskova korekce hracovy pozice
_root.akce_1.vg = 0; // vynulujeme hracovu gravitacni rychlost dolu, címz jej zastavíme
_root.akce_1.muzeme_skocit = 1; // hrac muze znovu vyskocit, protoze stoji na pevne zemi
_root.akce_1.skaceme = 0; // dopadli jsme, takze uz neskaceme
}
_root.akce_1.stojime = 1; // jestlize panak stoji na plosine, tak akcim_1 predame informaci, ze stoji, tak at nepada
}
}

- znovu se vrátíme ke klipu akce_1 a do onClipEvent(enterFrame) třeba hned za první dva řádky (za naplňování proměnných p_x a p_y) doplníme script pro padání hráče:
////////////
// PADANI HRACE 1
///////////
if (!stojime) // jestlize nestojime, tak padame :]
{
dopadl = 1; // dopadl uvedeme na true, aby nektera plosina mohla zavolat jednorazovou akci spojenou s dopadem
vg += 0.6; // pricitani gravitacni rychlosti dolu
_root.panak1._y += vg; // padani panaka
}
stojime = 0; // stojime uvedeme vzdy na false, protoze kdyz nestojime, tak abychom zacali automaciky padat.


V této fázi by měl panáček padat a po dopadu na plošinu se zastavit. Zkuste v klipu akce_1 nastavit v onClipEvent(load) y-ovou souřadnici panáčka na menší hodnotu a zkuste spustit. Pokud panáček správně nepadá, nemá smysl pokračovat dál, protože bez správného pádu nemůže proběhnout správně skok.
Pokud ale umíme padat, můžeme si poskočit - pokud do klipu akce_1 doplníme následující script. Prohlédněte si ho také proto, abyste zjistili, kterou klávesou skáčeme (kontroluje se její ASCII kód - ASCII kódy jednotlivých kláves lze zjistit v nápovědě Flash: Flashe pod Help > ActionScript Dictationary. Poté se vám otevře HTML stránka s helpem, tam pokračujte v levém menu: Using Flash > Keyboard Keys and Key Code Values > Letters A to Z and standard numbers 0 to 9).

//////////
// SKAKANI HRACE 1
/////////
if (Key.isDown(79) && muzeme_skocit && !drzime_skok) // jestlize zmackneme O a muzeme_skocit je true a kdyz "nedrzime klavesu pro skok"
{drzime_skok = 1; // drzime tlacitko pro skok
muzeme_skocit = 0; // Jestlize jsme jiz vyskocili, tak jiz skocit nemuzeme, dokud zase nedopadneme
skaceme = 1; // skaceme je true, protoze diky teto hodnote se budeme pohybovat nahoru
rych_skoku_nahoru = rychlost*2.5; // vypocitame rychlost skoku nahoru
}
if (skaceme) // v predchozim kroku jsme vyskocili, nyni se dusledkem vyskoku pohybujeme nahoru
{
_root.panak1._y -= rych_skoku_nahoru; // pouze pohyb hrace nahoru, jeho padani mame zajisteno v sekci Padani
}
if(!Key.isDown(79)) // az jak pustime O, splnime jednu z podminek pro dalsi vyskok (to abychom stale neskakali)
drzime_skok = 0;
p_x = _root.panak1._x; // update souradnic predtim, nez je pouzijeme pri duplikovani
p_y = _root.panak1._y;// update souradnic predtim, nez je pouzijeme pri duplikovani


Úkoly (5 bodů):

Nauč svého panáčka padat a skákat.