Autíčko - dráha

Autíčko z minulé lekce má až příliš neomezenou působnost:-) V této lekci pro něj připravíme omezenou jízdní dráhu s mantinely, třeba jako v .swf ukázce.

Dráha bude tvořena dalšími klipy, u kterých se bude kontrolovat, jestli došlo k jejich "střetu" s naším autíčkem. Pro kontrolu kolize objektů disponuje Flash funkcí hitTest, která může mít různé parametry, my zatím použijeme jen název druhého objektu. Funkce zkontroluje, jestli došlo k dotyku objektů (přesněji obdélníkových oblastí, do kterých jsou tyto objekty vepsané, a to nemusí být vždycky úplně ideální). Ukázky využití této funkce jsem našel například také na těchto stránkách: ukázka 1 , ukázka 2.

Můžeme vytvořit například obdélníkový okraj (konvertovat ho na klip) a tomuto klipu přidat následující skript:

onClipEvent(enterFrame)
{
if(this.hitTest(_root.auticko)) // jestli se srazí s autickem
{_root.auticko.rychlost = 0;
}
}


Při každém načtení snímku, který obsahuje tento klip (onClipEvent(enterFrame)) se vykoná příkaz
if(this.hitTest(_root.auticko)) {_root.auticko.rychlost = 0;} - jestliže (if) tento (this) objekt (okraj) koliduje s autíčkem (odkazujeme na něj _root.auticko), potom se do proměnné pro rychlost autíčka uloží nula.

Rychlost se při srážce sice vynuluje, ale při stisku šipky nahoru (nebo dolů) se zase zvětšuje (zmenšuje), takže se autíčko může zase rozjet, třeba couvnout (nebo i projet překážku), určitě nechceme, aby při jakékoliv srážce zůstalo autíčko definitivně stát.

Jiná možnost by byla rychlost třeba jen výrazně zmenšit, například:
_root.auticko.rychlost = int(_root.auticko.rychlost/5);
nebo autíčko od překážky "odstrčit" tím, že bychom při kolizi souřadnice autíčka "zmenšili" (vzorec je stejný jako pro pohyb, jen místo znaménka + můžeme použít znaménko - ):
_root.auticko._x = _root.auticko._x-Math.sin(_root.auticko._rotation*(Math.PI/180))*_root.auticko.rychlost;
_root.auticko._y = _root.auticko._y-Math.cos(_root.auticko._rotation*(Math.PI/180))*_root.auticko.rychlost*(-1);

Všechny možnosti mají své klady i nedostatky (jako vždy), můžete je vyzkoušet a použít tu, která vám bude nejvíc vyhovovat.

Další drobný problém je právě v tom, že se kontroluje kolize oblastí, které vypadají různě, třeba podle otočení autíčka, a ne vždycky to vypadá dobře. Tento problém můžete "maskovat" tím, že přes například obdélníkové klipy, u kterých kontrolujete kolizi, nakreslíte nějaký trochu větší obrázek. Podobně je to vyřešeno v úvodní ukázce, klipy, u kterých se kontroluje kolize, jsou "ukryty" pod nepravidelnými tvary různých barev.


Úkoly (6 bodů):

Vytvořte pro autíčko závodní dráhu s mantinely a různými překážkami (můžete vyzkoušet různé působení překážek na rychlost). Doplňte další grafiku (trávník, písek, olejové skvrny apod.) - kvůli vzhledu a kvůli vylepšení kolizí.