Pohyb po křivce:

Příprava

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".

Skriptování

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í.

prohlédnout
stáhnout zdroják

hlavní stránka # o tento web se stará Lukáš Havrlant # lukas.havrlant@gmail.com