Flash.jpw

  • Obecné
  • Adobe Flash
  • ActionScript 1 & 2.0
  • ActionScript 3.0
  • Diskuse
  • ActionScript 1 & 2.0

  • Úvod do ActionScriptu
  • Proměnné, pole a generický objekt
  • Podmínky a smyčky
  • Funkce
  • Úvod do objektů
  • Vlastní třídy
  • Objekty CORE
  • Objekty MOVIE
  • Výjimky
  • Asynchronní události
  • Viz též…

  • Wiki: ECMAScript
  • Wiki: Bitový operátor
  • Následující: Proměnné, pole a generický objekt
  • Úvod do ActionScriptu

    Animace lze vytvářet způsobem popsaným v předchozích kapitolách, ale výsledek je neměnný. ActionScript dovoluje přidat do animací interaktivitu a změnit je třeba na menu, webovou stránku, hru, nebo formulář.

    ActionScript je dialekt ECMAScriptu, stejně jako JavaScript. Syntaxe obou jazyků je tak velmi podobná, pochopitelně se ale liší výchozí objektovou výbavou. Pokud bych byl placen od počtu přívlastků, dodal bych, že je skriptovací, objektově (prototypově) orientovaný se silnou statickou typovou disciplínou.

    Od verze 2.0 je jazyk kompletně case-sensitive.

    Funkce trace {#}

    V ukázkách často používám funkci trace. Ta dělá jen to, že předaný obsah zobrazí v panelu Output.

    trace(3+10);	// v panelu Output se zobrazí 13

    Synchronní a asynchronní spouštění skriptů {#}

    Klíčový snímek s příkazemSynchronní skripty jsou vykonávány synchronně s přehráváním animace nebo obecně s během programu. Obecně platí, že jsou zpracovány sériově, časově náročnější operace proto mohou zpomalit samotný běh animace. Jako synchronní akce lze chápat skripty definované klíčovým snímkům časové osy. Přítomnost takového skriptu indikuje symbol a.

    Naopak asynchronní skripty jsou vykonány paralelně k běhu progamu - po nějaké události (zpravidla nezávislé na pozici přehrávání). U složitějších aplikací tvoří asynchronní skripty drtivou většinu programu.

    Typické události, se kterými se nejčastěji potkáte:

    Grafické objekty, u kterých se nejčastěji asynchronní události sledují, jsou Tlačítko (Button) a MovieClip. Kromě nich samozřejmě všechny další, u kterých může nějaká událost vzniknout.

    Panel Actions {#}

    Skripty se vybranému snímku (či objektu) zapisují pomocí panelu Actions. Ten můžete otevřít klávesou F9.

    Panel Actions

    Panel obsahuje kromě skriptového editoru také strom předdefinovaných funkcí a objektů, následovaný ukazatelem aktuální pozice v objektovém stromu.

    9 z 10 EMO doporučuje panel Actions ve Flashi

    I celkem normální jedinec má totiž po dvou hodinách práce s panelem Actions chuť se začít řezat.

    Editor je špatný. Slovem špatný je myšleno příšerný. U produktu za dvacet tisíc už to hraničí skoro s drzostí.

    Jediné, co panel povyšuje nad obyčejný notepad, je obarvování kódu (a to celými dvěma barvami - pro rezervovaná klíčová slova versus všechno ostatní), nepoužitelný code-folding, nepoužitelný code-hinting a samozřejmě v neposlední řadě pak nezapomeňme na auto-format (který ve slabších chvílích kreativně vytváří syntaktické chyby). Korunováno to pak budiž debuggerem, ze kterého se člověk, pokud nemá chuť prolistovat celý display-list, dozví povětšinou prd.

    Není pak překvapením, že se programátoři pro psaní tříd uchylují k externím editorům - například výbornému Flexu (aka Flash Builderu).

    Script Assist {#}

    Kromě klasického zápisu skriptů je možné využít i skriptového asistenta. Je to nástroj, který dokáže pomoci definovat argumenty běžným funkcím - v našem případě vidíme gotoAndPlay.

    Pro laika může být na jednoduché operace užitečnou pomůckou. Pro skutečnou tvorbu programů je nepoužitelný.

    Script Assist

    Běžné operátory ActionScriptu {#}

    Jen heslovitě. Nechtějte po mě, abych vysvětloval, co je aritmetický rozdíl.

    Aritmetické {#}

    -rozdíl
    +součet nebo spojení řetězců
    *součin
    /podíl
    %modulo (zbytek po celočíselném dělení)

    Srovnávací {#}

    Jejich výsledkem je pravdivá nebo nepravdivá hodnota.

    ==rovnost
    !=nerovnost
    <menší
    <=menší nebo roven
    >větší
    >=větší nebo roven
    ===shodnost (identita)
    !==neshodnost

    Logické {#}

    Také booleovské, chcete-li. Slouží ke spojování booleovských výrazů.

    !negace
    &&a zároveň
    ||nebo

    Přiřazovací {#}

    Přiřazují hodnotu.

    =přiřazuje prvku vlevo hodnotu vpravo
    -=odečte (přičte, vynásobí, vydělí) hodnotu vlevo hodnotou vpravo
    +=
    *=
    /=
    ++přičte 1
    --odečte 1

    Speciální {#}

    instanceofověřuje, zda je objekt vlevo instancí objektu vpravo
    typeofvrací typ objektu
    ?:ternární operátor - viz podmínky
    .potomek objektu - viz objekty

    instanceof je ve verzi 3.0 nahrazen operátorem is.

    Bitové {#}

    Pro manipulaci s bity hodnot. Jejich seznam už zde neuvádím, jsou stejné jako všude jinde.

    Ve Flashi se používají málo, ale můžete se s nimi setkat u pokročilých datových operací (například výpočty hashů a podobně).

    Zápis asynchronních skriptů {#}

    Event framework ActionScriptu popisuje samostatná stránka, zde uvádím jen základní syntaxi.

    Jak se definuje synchronní skript, už víte, napíše se do klíčového snímku. A teď kam napsat asynchronní skript? Je několik metod, ne všechny jdou použít pro všechny objekty a situace. Vezmu to podle toho, jak zápisy vznikaly.

    Malá odbočka do budoucnosti. Jak za chvíli uvidíte, celý event-framework actionscriptu 2.0 je jeden velký brajgl, kde se liší názvy stejných události u různých objektů a druhů zápisů. Kde některé zápisy použít někde jdou a někde ne. Tvůrci tak udělali jedinou možnou věc, napsali to celé znova. Tím pádem, nic z toho, co je tu popsáno, ve verzi 3.0 nefunguje.

    Skript definovaný přímo instanci {#}

    Nejstarší možnost, pravděpodobně nejjednodušší, určitě nejpřímočařejší a zavržená.

    Místo snímku vyberete instanci tlačítka nebo movieclipu v animaci a v panelu Actions pak můžete psát:

    on (press) {
    	_root.play();
    }
    on (release, releaseOutside) {
    	_root.stop();
    }

    Vidíte, že je možné definovat najednou více událostí, v našem případě je to kliknutí a uvolnění kliku myši uvnitř i vně tlačítka.

    Ve verzi 3.0 už tento způsob zápisu nejde použít.

    Definování event-handleru vně objektu {#}

    Event-handler (řekli bychom obsluha události) je vlastnost objektu, které je možné připojit obsluhující funkci.

    mojeTlacitko.onPress = function() {
    	_root.play();
    }
    mojeTlacitko.onRelease = mojeTlacitko.onReleaseOutside = function() {
    	_root.stop();
    }

    Jako listener jsme zde použili anonymní funkci. Ta se zde používá nejčastěji, ale je možné použít i běžnou funkci nebo metodu.

    Button Properties Protože definujeme událost vně instance objektu, je samozřejmě nutné ji mít pojmenovánu. V našem případě mojeTlacitko.

    Instanci můžete pojmenovat na panelu Properties.

    Velká výhoda tohoto postupu je, že můžete definovat (a také měnit) události odkudkoliv a během přehrávání.

    Ve verzi 3.0 by tento způsob technicky mohl jít použít, ale objekty už zde nepoužívají event-handlery.

    Připojení event-listeneru vně objektu {#}

    Některé objekty v AS2 (hlavně komponenty) používají modernější event-framework. Metodou addEventListener lze připojit událostem instancí listenery (posluchače).

    mojeKomponentoveTlacitko.addEventListener('click', function() {
    	_root.play();
    });

    Jako listener zde může sloužit i generický objekt místo funkce. Jazyk pak v tomto objektu bude hledat metodu click. Můžete tak zabalit listenery do jednoho balíčku a používat na různých místech.

    AS3.0 používá výhradně tento model (mírně odlišný, ale v podstatě tento).