Martin Hozík
hozikm@seznam.cz
ICQ: 323756613

HTML 4.0 validní
|
Vlastní kurzor a duplikace MC
V této kapitole jsem se rozhodl spojit 2 příklady dohromady, protože jsou
velmi jednoduché a krátké.
1. Vlastní kurzor
Poslední dobou se v mojí poště množí dotazy na vytvoření vlastního
kurzoru. Dnes vám vysvětlím jeden způsob, jak ho vytvořit. Tento postup
nenahrazuje ani tak kurzor samotný, ale namísto něj zobrazí určitý MovieClip
Takže nejprve si vytvoříme MovieClip, který může obsahovat jak
statickou, tak i pohyblivou grafiku. Je velmi důležité dbát na správnou
pozici středu (symbol "+")
Tento MovieClip vložíme na plochu a definujeme mu následující příkazy:
onClipEvent (load) {
Mouse.hide();
startDrag(this, true);
}
onClipEvent (mouseMove) {
updateAfterEvent();
}
Předchozí příkazy znamenají, že po načtení animace se nejprve skryje
kurzor myši (Mouse.hide()), jinak by totiž byl vidět spolu s
MovieClipem
A následně se zahájí tažení našeho MC (this=tento), přičemž je je pozice
kurzoru uzamčena do středu MC (Lock mouse to center)
Pokud bychom to nechali takto, aktualizovala by se pozice v závislosti na
framerate, což by vyžadovalo použití vysoké framerate (18-25). My však
použijeme příkaz updateAfterEvent();, který při jakémkoliv
pohybu myši (mouseMove) aktualizuje proměnné _xmouse a _ymouse,
charakterizující pozici myši v animaci. Tím pádem bude pohyb kurzoru zcela
plynulý a nezávislý na rychlosti přehrávání.
To je vše. Jen mějte na paměti, že kurzor by neměl uživatele rušit, a
už vůbec ne otravovat.
2. Duplikace MovieClipu
Jak jistě víte z kapitoly "Knihovna",
je možné vytvářet velké množství instancí symbolů umístěných v knihovně,
aniž by se zvětšila velikost animace a těmto instancím měnit řadu atributů.
Podobnou operaci s MovieClipem umožňuje příkaz duplicateMovieClip().
Asi bude nejlepší, když vám jeho funkci předvedu na následujícím příkladu:
Řekněme, že máme na ploše umístěn MC s názvem "prvni"
Dále do 1. snímku animace umístíme následující příkaz:
duplicateMovieClip("prvni", "druhy", 1);
Tento příkaz vytvoří kopii MC "prvni" s názvem "druhy". Ta jednička na
konci je tzv. Hloubka (Depth). Toto číslo určuje pozici MC v ose Z.
Počáteční MC má depth=0 a tím pádem bude jeho duplikát "druhy" vidět nad
ním. (Pokud by tam místo 1 bylo -1, tak by to bylo opačně)
Efekt předchozího příkazu by byl prakticky nulový (kopie by byla
identická a na stejném místě). Proto použijeme příkaz setProperty().
Například:
setProperty("druhy", _alpha, 50);
setProperty("druhy", _rotation, 15);
setProperty("druhy", _x, 130);
setProperty("druhy", _y, -50);
tyto příkazy nastaví duplikátu 50% průhlednost (alpha), otočí ho o 15°
(rotation) a definují mu pozici _x=130 a _y=-50
Takže už víte, jak duplikace MC funguje a teď si vytvoříme trošku
složitější příklad. Pokud bychom chtěli vytvořit vetší množství kopií s
podobnými vlastnostmi, bylo by psaní příkazů docela zdlouhavé. My tedy
použijeme smyčku.
nejprve si tedy, jako v předchozím případě, vytvoříme MC, umístíme jej
na plochu a pojmenujeme pro změnu "bod"
Tomuto MC definujeme následující příkazy:
onClipEvent (load) {
_root.xpos = _x;
_root.ypos = _y;
}
Tento zápis znamená, že po načtení animace se do proměnných xpos
a ypos zapíše počáteční pozice MC "bod" (_x a _y).
Od této pozice se pak budou umísťovat kopie.
Nyní můžeme do 1. snímku definovat následující příkazy (v ukázce jsem
je, kvůli názornosti, definoval tlačítku)
var i = 1;
while (i<=450) {
duplicateMovieClip("_root.bod", "bod"+i, i);
setProperty("bod"+i, _x, _root.xpos + i);
setProperty("bod"+i, _y, _root.ypos - Math.tan(i/20)*10);
i++;
}
Zde je použita nejjednodušší smyčka (While). Na samém začátku je
definována lokální proměnná i=1.
Následuje smyčka, která vykonává příkazy dokud platí, že i <= 450
(menší nebo rovno).
Je tedy duplikován MC ("bod") a jeho kopii je přiřazen název
"bod"+i.
Následuje nastavení vlastností nově vzniklého MC. V našem
případě se definuje x souřadnice jako pozice počátečního MC + i.
Dále je určena y souřadnice, tentokrát pomocí goniometrické funkce
tangens (Math.tan).
Úplně nakonec se k proměnné i přičte jednička (++)
Pro názornost - 5. cyklus by se mohl nahradit tímto zápisem:
duplicateMovieClip("_root.bod", "bod5", 5);
setProperty("bod5", _x, _root.xpos + 5);
setProperty("bod5", _y, _root.ypos - Math.tan(0.25)*10);
Pro šťouraly: výraz uvnitř funkce tangens je podělen 20
(zvětšení periody) a celá funkce je vynásobena 10 (zvětšení amplitudy).

prohlédnout

stáhnout [24 kB]
|