Jelikož dostávám poměrně dost dotazů a podnětů na článek o psaní actionscriptů ve Flashi, je tu tedy druhá část mého krátkého seriálu, která se může hodit všem, kteří s Flashem již nějaký čas pracují, ale nejsou si jisti, jestli postupují úplně správně nebo nevědí, jak některé problémy překonat.

Práce s grafikou ve Flashi je záležitost poměrně intuitivní a je na jen na vás, co nového vás napadne, ale jak správně „rozchodit“ prezentaci nebo aplikaci, je záležitost asctionscriptu a potřebné „fígle“ odněkud získat musíte.

Flash nabízí využití layerů pro grafické objekty, ale je i velmi užitečné si v každé časové ose vytvořit jeden layer, který bude určen pouze pro actionscripty a jeden layer pouze pro „jmenovky“ (labels). Uvidíte že vaše práce se tak značně zpřehlední.

Nepoužívejte již staré příkazy typu „tellTarget“ nebo „setProperty“, které ve Flashi 5 zůstaly jen kvůli zpětné kompatibilitě se staršími verzemi playerů. Například příkaz na tři řádky:

tellTarget („auto“;) {
gotoAndPlay (1);
}

se dá snadno nahradit jedním řádkem využitím objektu movieClip:

auto.gotoAndPlay(1);

Je jasné, že čím je příkaz kratší, tím je zpracování actionscritpu rychlejší a výsledný soubor .swf menší. Totéž se dá říci například i o příkazu „setProperty“, přičemž

setProperty („auto“, _alpha,“90″;);

nahradíme takto:

auto._alpha=90;

Něco podobného platí i pro používání „lomítkové syntaxe“, zapomeňte na ni, a dejte se cestou tzv. „dot syntaxe“, která je doporučena i v manuálu.

Z každého grafického objektu, vytvořte symbol (F8) nebo alespoň skupinu-group (CTRL+G). Názvy objektů volte tak, abyste po pár dnech v library poznali alespoň rámcově, co který symbol představuje. Každý si jistě nalezne svoji nejoptimálnější „naming strategy“. Já například používám pro pojmenovávání symbolů systém: "00_jmeno_basic", což znamená, že "00" je objekt klíčový a "basic" značí, že symbol je základní součástí jiného symbolu, např. pozadí tlačítka v menu.

V library si také jednou za čas udělejte pořádek tak, že symboly umístíte do adresářů.

„Hodně muziky“ se při animování ve Flashi nedělá pomocí monotóního „tweening“, ale řešení je ve "vychytralém" actionscriptu. Proto předtím než se pustíte do nějaké animace, se zkuste zamyslet, zda by nešla využít nějaká z funkcí, např.

„duplicateMovieClip“, „.attachMovie“: nebo „.swapDepths“

Velmi užitečná funkce ve Flashi 5 je „UpdateAfterEvent ()“. Díky této funkci jste schopni provádět události mezi framy, takže již nejste omezeni pouze na časovou osu. Za normálních okolností totiž Flash překreslí obrazovku pokaždé, když vstoupí do nového framu, ale díky této funkci tomu tak být nemusí, například tímto přiřazeným actionscriptem k movieClipu:

onClipEvent (enterFrame) {
this._x=x+5;
x=x+5;
updateAfterEvent ();
}

dosáhnete toho, že se objekt bude neustále posouvat zleva doprava a to pouze v rámci jednoho framu v timeline…

Při práci s externími datovými soubory využívejte XML formátování a popis proměnných. Pokud například chcete ve Flash perzentaci často měnit textový obsah, určitě se vyplatí vymyslet přehlednou strukturu obsahového dokumentu a napsání načítací funkce. XML dokument má oproti souboru .TXT tu velkou výhodu, že můžete kontrolovat, zda je dokument načten v paměti (pomocí objektu .onLoad), což se hodí pro plynulé streamovaní animace.

Dříve jsem se zajímal o to, zda lze z Flashe samotného ukládat soubory ve formátu XML. Pravda je taková, že nelze (kromě příkazů FSCommand a exec). Vždy musíte pro ukládání souborů na server využít nějaký další skriptovací jazyk např PHP, ASP nebo CGI. Je to škoda, a snad se to změní ve Flashi 6.

Mnoho lidí si stále nedovede představit jak alepsoň v na nejzákladnější úrovni dosáhnout spolupráce Flashe a PHP. Příklad jak, z PHP skriptu načíst hodnotu proměnné je následující:

&hodnota_promenne=
<?
telo skriptu
.
.
echo $vysledna_hodnota_promenne;
?>

Princip je snadný: v těle skriptu se provedou operace a funkce (např. načtení dat z databáze MySQL) a na konci výsledek vypíšeme pomocí příkazu "echo". Ve flashi pak pomocí:

loadVariablesNum („skript.php“, 0);

načteme výsledek, který se přiřadí do flash proměnné nazvané „_level0.hodnota_promenne“ (definováno ještě před "otazníkovým tagem" na úplném začátku dokumentu).

Velmi důležité při načítání proměnných z externích souborů SWF je fakt, že NEmůžete tyto proměnné používat ješte v tom samém framu. Flash provádí akce, které nahrávají proměnné ze.swf souborů (funkce "loadMovie") až na konco skriptu, proto vám proměnné budou k dispozici nejdříve ve framu následujícím.

Při práci se zvukem (hlavně s hudbou) používáte určitě objekt „Sound()“. Ale pokud jste to již zkoušeli, tak při pužití takového objektů nefunguje klasický preloader. Je to způsobeno tím, že zvukový soubor, který se v library exportuje pomocí „linkage“:

se načítá ješte dříve než první frame v celé animaci. Preloader tak vlastně ani není preloader, protože než se na obrazovce objeví upozornění "loading" musí se beztak načíst celý zvuk… Obejdete to tím, že hudbu a velké větší soubory budete exportovat ve zvláštních .swf souborech a ty pak budete postupně v preloaderu načítat pomocí funkce „loadMovie“ například do levelu1. Ve vlastní podmínce preloaderu pak pomocí příkazu:

_level1.getBytesLoaded();

budete kontrolovat, jakou část externího souboru jste již načetli do cache.

To bude pro tentokrát vše. Snad některé vám zde uvedné informace budou prospěšné a pomohou vám při další práci. Místo pro případné dotazy a připomínky snad nabídne diskuze ke článku.

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Žádný příspěvek v diskuzi

Odpovědět