Flash Help
Flash
ActionScript
Příklady





Webmaster

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


W3C Validita

      HTML 4.0 validní




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. Příkazy spojené s podmínkami a smyčkami lze vkládat v sekci Actions - Condition/Loops.

Podmínky

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.



Jiná možnost:

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



Ještě jiná možnost:

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.





Smyčky

Smyčka také kontroluje pravdivost zapsaného výrazu. Pokud je zápis pravdivý, provedou se akce uvnitř smyčky, ale narozdí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
    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 scriptu pokračuje za smyčkou - viz příklad:
    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
    Úplně stejný princip jako v předchozím případě, jen z 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:
    i = 5;
    do {
       myMC.duplicateMovieClip("newMC" + i, i);
       i--;
    } while (i > 0);
    
  • For
    Poslední typ smyčky ve Flashi. Tato smyčka je nejsložitější. 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ý (TRUE), 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 (i = 4; i > 0; i--) {
       myMC.duplicateMovieClip("newMC" + i, i);
    }
    
    i = 4 .......... počáteční výraz - provede se před prvním cyklem (v našem případě definování proměnné i = 4)
    i > 0 .......... výraz, jehož pravdivost se kontroluje
    i--    .......... koncový příkaz - je vykonán na konci každého cyklu (v našem případě odečtení 1 od "i")


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

Problém

Předchozí příklady ve vás možná evokovaly pocit, ž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;

Tento způsob použití smyčky sice není v rozporu se správnou syntaxí, ale v praxi je nepoužitelný. Je totiž nutné si uvědomit jednu důležitou skutečnost - všechny příkazy definované snímkům a objektům jsou provedeny po splnění události (MouseOver, KeyDown, ...) v jeden okamžik! Pokud bychom tedy spustili animaci s předchozí smyčkou, bylo by provedeno v jeden moment nekonečně mnoho operací, což nelze. Abych to shrnul - každá smyčka musí mít konečný počet cyklů (ať už pomocí proměnné, nebo příkazu "For").






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ů, které jsou pojmenovány (1, 2,..). Pokud switchi definujeme jako argument jméno bloku, vykoná příkazy uvnitř. Viz příklad:

abc = 2;

switch (abc) {
     case 1 :
          gotoAndPlay(1);
          break;

     case 2 :
          gotoAndPlay(5);
          break;

     case 3 :
          gotoAndPlay(10);
          break;

}

Zde je 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);



Důležité! Aby se vykonaly příkazy v bloku kódu, musí být
striktně roven (strict equality "===")
argument a název bloku kódu. Striktní rovnost je dodržena, když souhlasí jak hodnota, tak i typ proměnné:   3 !== "3"

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

 

Pokud nebude striktně souhlasit argument 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:

abc = "blablablabla";

switch (abc) {

     case "prvni":
                gotoAndPlay(1);
                break;

     case "druhy":
                gotoAndPlay(5);
                break;

     default:
                Stop();
                break;

}
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();




Nahoru

Copyright © Martin Hozík - All rights reserved.
Flash are registered trademark of Macromedia Inc.