Už jistě dokážete vytvořit pohyb po křivce pomocí motion guide, ale Flash nabízí i jiné - dynamičtější možnosti jak docílit pohybu po křivce.
Vytvořte movie clip, do kterého nakreslete malou kuličku. Vložte tento MC do hlavní scény a pojmenujte jej "kulicka". Dále na hlavní scéně vytvořte čtyři textová inputová pole, které umístěte někde vlevo nahoře. Pojmenujte je "sirka", "vyska", "rychlost" a "polomer". Do každého z nich vepište 1, jen poloměr dejte 100 (buď přes ActionScript nebo dvojkliknete na pole a normálně tam číslo napíšete).
Dále vytvořte druhý MC, do kterého nakreslete kruh a vymažte výplň, čímž vám vznikne pouze kružnice. Tu upravte na velikost H:200, W:200. Vložte do hlavní scény, vycentrujte a pojmenujte "kruh".
Následující skript připojte k instanci "kulicka":
onClipEvent (load) { stupen=Number(_root.rychlost.text); }
Tímto jste pouze zadeklarovali novou proměnnou "stupen", která bude mít hodnotu 1. Z této proměnné se bude určovat rychlost pohybu kuličku po odráze. Za tento skript přidejte další:
onClipEvent (enterFrame) { r=Number(_root.polomer.text); k=_root.sirka.text; l=_root.vyska.text; alfa=(Math.PI/180)*stupen; _root.kulicka._x=((Math.cos(alfa)*r)*k)+275; _root.kulicka._y=-((Math.sin(alfa)*r)*l)+200; if (_root.rychlost.text=="" || _root.rychlost.text==0) { stupen=stupen; } else { stupen+=Number(_root.rychlost.text); } }
Takže popořadě.
Vše se bude provádět každý frame. Nejprve přečtete z textových polích tři proměnné - "r" což je poloměr kružnice, který bude kulička opisovat, "k" je šířka tohoto kruhu (respektive elipsy) a "l" je výška kruhu (elipsy).
Na dalším řádku deklarujete novou proměnnou "alfa", které přiřadíte úhlovou rychlost otáčení. Flash pracuje automaticky s radiány, takže pokud chcete ve svém programu používat stupně, musíte vaši hodnotu stupňů převést na radiány.
Do 180 stupňů se vleze Pí radiánů. 1 stupeň se tak dá zapsat jako Pí/180 rad a n stupňů jako (Pí/180)*n rad. Nyní má proměnná "alfa" stejnou hodnotu jako "stupen", jen převedeno na radiány a tak s touto proměnnou můžete dále bez obav počítat.
Další dva řádky postupně mění x-ové a y-ové souřadnice na základě měnícího se úhlu. Takže nejprve vypočítáte x-ovou souřadnici. Math.cos(alfa) zjistí poměr přilehlé odvěsny ku přeponě, což v praxi znamená že zjistí poměr x-ové souřadnice ku poloměru. Tento poměr poté vynásobíte poloměrem a získáte x-ovou souřadnici kuličky, jestliže svírá s osou x úhel "stupen" stupňů ("alfa" radiánů). Aby se kulička pohybovala ve středu scény, musíte ještě přičíst poloviční velikost scény, tj. (v mém případě) 275.
y-ovou souřadnici určujete stejně, jenom používáte místo cosinu sinus a protože je ve Flashi opačná y-ová osa, musíte výsledek vynásobit mínus jedničkou (proto to mínus před závorkami).
Potom už jenom přičítáte k proměnné "stupen" hodnotu z textového pole "rychlost", čímž docílíte změny úhlu a tímpádem také souřadnic.
Podmínka pak říká, že jestliže je pole prázdné nebo se rovná nule, proměnná "stupen" se bude rovnat sama sobě, což znamená, že se nezmění úhel a tímpádem ani souřadnice.
Nyní připojte následující skript k instanci kruhu:
onClipEvent(enterFrame) { this._xscale=_root.sirka.text*_root.polomer.text; this._yscale=_root.vyska.text*_root.polomer.text; }
Velikost kruhu se tak bude přizpůsobovat křivce, po které se kruh bude pohybovat. Šířka je na začátku 1 (psali jste ji na začátku do inputového pole "sirka") a poloměr 100. Jelikož _xscale nepoužívá pixely, ale procenta, zůstane kruhu 100% šířka (1*100=100). Pokud např. zvýšíte šířku křivky na 2, zvýší se _xscale na 200% a tímpádem se šířka zdvojnásobí.