Kolize

V této lekci přidáme panáčkovi mantinely, buď pomocí kolizí jako autíčku nebo pomocí kontroly souřadnic, dopadnout by to mělo jako .swf ukázce.

Pro pohyb doleva a doprava omezíme pohyb panáčka pomocí kontroly x-ové souřadnice. Při pohybu vpravo se x-ová souřadnice zvětšuje a ve chvíli, kdy panáček dosáhne pravého okraje (jeho souřadnice závisí na rozměrech scény), chceme, aby se už nezvětšovala. Stačí do scriptu objektu akce_1, do podmínky, kdy je stisknuta šipka doprava, vložit (třeba hned na začátek):

// kolize se stenou vpravo
if (_root.panak1._x >= 780)
_root.panak1._x = 780;

Podobně při pohybu vlevo nebudeme chtít, aby se x-ová souřadnice zmenšila pod některou hodnotu (závisí na šířce panáčka, je potřeba vyzkoušet, nebo použít, podobně jako v dalších směrech, šířku panáčka - _root.panak1.width). Do příkazů prováděných při stisku levé šipky lze vložit následující příkaz:

// kolize se stenou vlevo
if (_root.panak1._x <= 20)
_root.panak1._x = 20;

Pro horní a spodní "stěnu" využijeme metody kolizí, podobně jako v předcházejících lekcích (také proto, že vytvořené plošiny budeme moci použít i později).
Nejprve vytvoříme nový klip (Insert New Symbol - Movie), pojmenujeme jej třeba plosina. Bude obsahovat jen velmi tenkou čáru. Klip vložíme na scénu, v jeho Properties nastavíme šířku stejnou jako je šířka scény, a v nabídce Align (Windows - Align) jej zarovnáme na spodní okraj doprostřed. Připomeňte si, že pro zjištění kolize (srážky, doteku) dvou objektů slouží funkce hitTest, plošině můžeme vložit tento script:

onClipEvent(enterFrame)
{
// Jestlize hrac 1 stoji na plosine
if(this.hitTest(_root.panak1)) // jestlize stojime na plosine
{_root.panak1._y = this._y-_root.panak1._height/2;
}
}

Všimněte si příkazu v podmínce - if(this.hitTest(_root.panak1)), znamená: jestliže this=tento objekt (plosina) koliduje (hitTest) s panak1, potom jeho souřadnici y zmenši o polovinu výšky klipu panak1 (pokud je v klipu panak střed ve středu obrázku panáka).

Jako strop použijeme tutéž plošinu, ale s tímto scriptem:

onClipEvent(enterFrame)
{
// Jestlize hrac 1 narazil hlavou do plosiny
if(this.hitTest(_root.panak1)) // jestlize narazime hlavou do plosinky
{_root.panak1._y += _root.akce_1.rychlost; // zastavime pohyb hrace smerem nahoru
}
}


Úkoly (5 bodů):

Doplň nějakým způsobem vyznačené hranice herní plochy a zajisti, aby je panáček nepřekročil.