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.