Flash.jpw

  • Obecné
  • Adobe Flash
  • ActionScript 1 & 2.0
  • ActionScript 3.0
  • 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
  • Předchozí: Proměnné, pole a generický objekt
  • Následující: Funkce
  • Podmínky a smyčky

    Podmínky a smyčky umožňují ovlivňovat sled provádění příkazů na základě nějaké skutečnosti.

    Podmínka If (pokud)

    Podmínka je útvar, který kontroluje pravdivost nějaké skutečnosti a podle toho buď provede, nebo neprovede příkazy napsané uvnitř (případně vykoná jiné). Nejlepší asi bude vysvětlit si vše na následujícím příkladu:

    if (vyhra == 0 && hotovost < 100) {
       gotoAndPlay(10);
    }

    Tento zápis znamená, že pokud (if) proměnná "vyhra" bude rovna nule a zároveň proměnná "hotovost" bude menší než 100 provedou se příkazy uvnitř složených závorek (v našem případě "běž na snímek 10").

    Pokud nebude splněna podmínka uvnitř kulatých závorek, nic se nestane a předchozí tři řádky jakoby neexistovaly.

    Jednotlivé výrazy se spojují typicky logickými operátory.

    Else (jinak)

    if (vyhra == 0 && hotovost < 100) {
       gotoAndPlay(10);
    } else {
       gotoAndPlay(1);
    }

    Zde nám přibylo ještě slůvko "else" (=jinak). Pokud není splněna podmínka, vykonají se příkazy uvnitř složených závorek za příkazem else (v našem případě "běž na snímek 1").

    Else if (jinak pokud)

    if (vyhra == 0 && hotovost < 100) {
       gotoAndPlay(10);
    } else if (vyhra == 50) {
       gotoAndPlay(1);
    }

    Příkaz "else if" (=jinak pokud) je podobný příkazu "else", ale příkazy uvnitř se vykonají jen v případě, že podmínka "if" splněna nebude a naopak podmínka "else if" splněna bude. Pokud tedy nebude splněna ani jedna podmínka, nic se nestane.

    Ternární operátor

    Ternární operátor není sice jazykový konstrukt, ale pro jednodušší podmínky, především pro přiřazování nebo předávání hodnot, se často používá.

    var cislo = 25;
     
    			// (podmínka) ? (pravda)    : (nepravda)
    var porovnani = cislo > 0 ? 'je kladné' : 'je záporné nebo nula';
     
    trace(porovnani);	// je kladné

    Smyčky

    Smyčka také kontroluje pravdivost zapsaného výrazu. Pokud je zápis pravdivý, provedou se akce uvnitř smyčky, ale na rozdíl od podmínky nepokračuje vykonávání ostatních skriptů, ale znovu se zjišťuje pravdivost výrazu. Pokud je výraz nepravda, pokračuje vykonávání příkazů za smyčkou.

    Existuje víc druhů smyček:

    While (dokud)

    Klasický typ smyčky. Výraz je kontrolován na začátku a dokud je pravdivý jsou příkazy prováděny pořád dokola, pokud ne, běh skriptu pokračuje za smyčkou - viz příklad:

    var i = 5;
    while (i > 0){
       myMC.duplicateMovieClip("newMC" + i, i);
       i--;
    }

    Pokud je proměnná "i" větší než 0, opakuje se stále dokola příkaz, který kopíruje MovieClip a odečte od proměnné "i" jedničku. Tato smyčka se tedy bude opakovat pětkrát. Pokud podmínka přestane být pravdivá, bude pokračovat zpracovávání příkazů za smyčkou.

    Do..While (proveď..dokud)

    Úplně stejný princip jako v předchozím případě, jen s malým rozdílem. Pravdivost zapsaného výrazu se kontroluje až na konci smyčky. Jistě vám tedy došlo, že příkazy uvnitř smyčky se i v případě nepravdivosti výrazu aspoň jednou provedou. Viz příklad:

    var i = 5;
    do {
       myMC.duplicateMovieClip("newMC" + i, i);
       i--;
    } while (i > 0);

    For

    Kompaktní a nejpoužívanější typ smyčky. Uvnitř kulatých závorek jsou definovány 3 výrazy (oddělené středníkem). První výraz se vykoná na začátku prvního cyklu a dál už ne. Druhý výraz smyčka hodnotí, a pokud je pravdivý, smyčka bude běžet až do chvíle, kdy pravdivý být přestane, nebo bude přerušena. A nakonec třetí výraz. Ten je vykonán na konci každého cyklu:

    for (var i = 4; i > 0; i--) {
       myMC.duplicateMovieClip("newMC" + i, i);
    }

    První a poslední výraz může obsahovat i více příkazů, ty se pak oddělují jednoduchou čárkou.

    For..In

    Poslední typ smyčky v ActionScriptu 2.0. Nepostradatelný pro průchod všemi prvky objektu. Jakýsi ekvivalent smyčky foreach (kterou možná znáte z PHP - AS3.0 už ji má taky).

    var objekt:Object = new Object({jmeno:'Pavel', icq:123456789});
     
    for(var prvek in objekt){
    	trace(prvek+' = '+objekt[prvek]);
    }
     
    // jmeno = Pavel
    // icq = 123456789

    For...in je nutné použít pro průchod neznámým počtem nečíselných prvků objektu (tam, kde nejdou použít číselné iterace). U polí (Array) je možné zůstat u obyčejného For.

    Přerušení a vrácení smyčky

    Někdy potřebujeme provádění smyčky přerušit, nebo naopak vrátit zpět na začátek (zkontrolovat pravdivost výrazu). Pro tyto účely existují příkazy Break (přerušení) a Continue (zpět na začátek). Viz příklad:

    i = 0;
    while (limit = 0) {
       if (i >= 10) {
    	  break;
       }
       i++;
    }

    Tento zápis znamená, že pokud se proměnná "limit" bude rovnat nule, bude se opakovat smyčka, uvnitř které je podmínka "if" a příkaz zvyšující proměnnou "i" o jedna. Pokud proměnná "i" dosáhne hodnoty 10, vykoná se příkaz break a smyčka se přeruší.

    Smyčku nelze použít na kontrolu asynchronních událostí

    Možná vás napadlo, že lze vytvořit smyčku, která by stále dokola kontrolovala nějakou skutečnost a podle toho prováděla nebo neprováděla akce:

    while (skore > 0){
       buton01.enabled = true;
    }
    buton01.enabled = false;

    A script in this movie is causing Flash Player to run slowly. If it continues to run, your computer may become unresponsible. Do you want to abort the script?

    Smyčka je synchronní konstrukce. To znamená, že program nepokračuje dále, dokud není ukončena. Není tedy možné ji použít na kontrolu asynchronních událostí (jako jsou třeba akce uživatele).

    Pokud vytvoříte nekonečnou smyčku, přehrávač vás vyzve k ukončení běžícího skriptu standardně po 15-ti sekundách (to lze nastavit v Publish Settings). Pokud výzvu odmítnete, bůh buď milostiv vaší duši, protože pak už zbývá jen zabití procesu celého prostředí ve Správci úloh systému, spojené samozřejmě se ztrátou neuložených dat.

    Switch (přepínač)

    Switch je zvláštní typ elementu ovlivňujícího tok příkazů, který se objevil ve verzi MX (6). Do jisté míry by se dal přirovnat k podmínce IF. Switch obsahuje několik bloků příkazů. Pokud switchi definujeme jako argument jméno bloku, vykoná příkazy uvnitř.

    var abc = 2;
     
    switch (abc)
    	 case 1 :
    		  gotoAndPlay(1);
    		  break;
     
    	 case 2 :
    		  gotoAndPlay(5);
    		  break;
     
    	 case 3 :
    		  gotoAndPlay(10);
    }
     

    Zde je definován argument jako proměnná "abc". Vložená hodnota se nyní porovná s názvy bloků, a pokud se název shoduje s jedním z bloků, vykonají se příkazy uvnitř. V našem případě gotoAndPlay(5);. Následuje příkaz break;, který ukončí vykonávání ostatních příkazů - jinak by pokračoval příkaz gotoAndPlay(10); - což v některých případech může být účel.

    Argument musí být identický

    Aby se vykonaly příkazy v bloku kódu, musí být argument identický (===) s názvem bloku. To jest, musí souhlasit jak hodnota, tak i typ proměnné.

    Názvy bloků nemusí být jenom čísla, může to být i textový řetězec (string) - viz příklad níže

    Default

    Pokud argument shodný s názvem jednoho z bloků, bude pokračovat vykonávání příkazů za přepínačem. Pokud bychom však chtěli, aby se i při nerovnosti argumentu a názvu bloku vykonaly nějaké příkazy, musíme použít blok s názvem default:.

    var abc = "blablablabla";
     
    switch (abc) {
    	 case 1 :
    		  gotoAndPlay(1);
    		  break;
     
    	 case 2 :
    		  gotoAndPlay(5);
    		  break;
     
    	 default:
    		  stop();
     
    }

    Jak je vidno, argument nesouhlasí s žádným blokem a proto budou vykonány příkazy uvnitř bloku "default" - v našem případě stop();