Grafika publishing webtip.cz grafika.cz mujiPod.cz mujmac.cz fotografovani.cz printing.cz builder.cz galerie
webtip.cz
adresář  | práce  | diskuse  | redakce  | inzerce
 
 


  Flash - podminky if, else if a else při praktickém použití
o autorovi 
poslat mailem 
tisknout článek 
aktuální rubrika 
Příklad, který zde budu popisovat se týká tvorby reálné prezentace, která obsahuje relativně velké množství tlačítek, u nichž po stisku každého dojde k různorodé akci, resp. nahrání různých externích dat.

Sudacki Lukáš - 12.02.2003 - clanek - Rubrika: Grafické editory Macromedia

Jako člověk, který se zabývá tvorbou prezentací a aplikací ve Flashi již dlouhou dobu se často setkávám s poměrně zbytečně složitými strukturami v podobných projektech. Tyto složité struktury je možné řešit mnoha způsoby, od těch nejvíce jednoduchých, které nejsou téměř vůbec založeny na Action Scriptu, až po ty, které jsou na těchto skriptech přímo postaveny. Právě tento fakt byl podnětem pro napsání tohoto článku, ve kterém se budeme zabývat vhodným využitím podmínek a proměnných při stavbě tradiční Flash prezentace.

Tyto podmínky, které jsou zmíněny výše, jsou ve Flashi reprezentovány ve tvarech if, else if a else. Principem těchto zápisů je zjišťování splnění určité události a následná reakce na ně.

Příklad, který zde budu popisovat se týká tvorby reálné prezentace, která obsahuje relativně velké množství tlačítek, u nichž po stisku každého dojde k různorodé akci, resp. nahrání různých externích dat. Vzhledem k tomu, že tlačítek je opravdu relativně mnoho, bylo nutné navrhnout takový "systém", jehož správa by byla poměrně jednoduchá a při tom nebylo nutné vytvářet mnoho rozličných Movie Clipů, kde by každý z nich obsahoval několik animací, stavů apod., nebo dokonce vše vytvářet v hlavní scéně a odkazovat se pouze na čísla klíčových snímků. Výsledkem celé práce byla tato struktura:

Každé tlačítko obsahovalo tento kód:

on (release) {
tellTarget (_root.main) {
gotoAndPlay (2);
promenna = "Co nabízíme";
}
}


Tento zápis udává, že po stisku tlačítka dojde k přesunu v Movie Clipu "main" na druhý klíčový snímek, od kterého začne samotné přehrávání (tento Movie Clip obsahuje všechny důležité akce) a dále se do proměnné "promenna" zapíší data "Co nabízíme". Jak je již zmíněno výše, tato akce bude přístupná na každém tlačítku s tím, že hodnota proměnné se vždy bude měnit podle toho, o jaké tlačítko se jedná.

Dalším krokem je úprava Movie Clipu s Instance name "main". Tento Movie clip může obsahovat nějaké animace, případně efekty, avšak na prvním políčku musí mít akci stop, aby se nezačal okamžitě přehrávat (čekáme až na přechod na druhý snímek a samotné spuštění). U tohoto reálného příkladu byla v Movie Clipu obsažena menší animace, která trvala cca 10 klíčových snímků. Na 15. snímku byl vložen nejdůležitější kód, tedy ten, který deklaroval provedení určitých akcí v závislosti na proměnných, které byly definovány. Kód vypadá asi takto:

nadpismain = promenna;
if (promenna == "Profil") {
loadVariables ("hlavni/profil.txt", _root.main.containerMC.scr_all.txt_field);
tellTarget (_root.main.obr1) {
gotoAndStop (2);
}
} else if (promenna == "Co nabízíme") {
loadVariables ("ceske/conabizime.txt", _root.main.containerMC.scr_all.txt_field);
tellTarget (_root.main.obr2) {
gotoAndStop (2);
}
} else if (promenna == "Kontakt") {
loadVariables ("hlavni/kontakt.txt", _root.main.containerMC.scr_all.txt_field);
tellTarget (_root.main.obr2) {
gotoAndStop (2);
}
}

Samozřejmě, že samotný kód byl mnohem delší (cca 80 řádků), nicméně podstata byla vždy stejná. Kód nejdříve definuje informace, které se mají zobrazit v dynamickém textovém poli "nadpismain". Vidíte, že není přímo definováno co se má zobrazovat, ale pouze odkaz na proměnnou "promenna". Tento fakt opodstatňuje tvar proměnných jako "Co nabízíme" apod. Tím chci říci, že často se jako hodnoty proměnných používají názvy jako "about", "conab" apod., kdy tyto názvy jsou pouze pro naši potřebu. Avšak v této situaci názvy proměnných zobrazujeme a proto je nutné, aby byly zapsány v plném tvaru.

Dále následují samotné podmínky. Na základě zjištění stavu proměnné (if (promenna==".......") se provede určitá akce - v tomto případě "natažení" externích textových souborů do textového pole v Movie clipu "containerMC", resp. "scr_all". Dále si můžete všimnout, že dochází k volání Movie clipu s Instance name "obr1", "obr2" apod. V této ukázce je to řešeno vnořenými Movie Clipy, nicméně je možné tu samou akci provádět jako volání externích Movie clipů, případně přímo obrázků (Flash MX), neboť právě ilustrační obrázky tyto Movie clipy obsahují.

Všechny tyto akce jsou vloženy na 15. snímku, nicméně Movie clip "main" se přehrává dále a na 15. snímku se nezastaví. Zastaví se až na 20., kde je vložena akce stop a kde existuje klíčový snímek obsahující Movie Clip "ContainerMC", do kterého se samotná data nahrávají (resp. do dynamického textového pole v něm obsaženém). Fakt, že data se natahují již na 15. snímku a při tom jsou zobrazeny až na 20. umožňuje snížit dobu, kterou bude uživatel vyčkávat než se data nahrají. V reálném příkladě se navíc ještě na 15. - 19. snímku přehrává animace, která dynamické pole "zacloňuje" a data mají čas se nahrávat částečně "dopředu". Na tomto klíčovém snímku jsou rovněž přítomny všechny ostatní Movie clipy, které jsou využívány, tedy ty, které obsahují obrázky, dodatečné formuláře apod. a jsou volány prostřednictvím Tell target z hlavní části kódu. Všechny tyto Movie clipy obsahují první políčko prázdné, čímž dojde k jejich "neviditelnosti" ve fázi, kdy s nimi pracovat nechceme. Tímto mohou být přítomny všechny na jednom místě a není třeba pro každý z nich vytvářet zvláštní vrstvu.

A aby toho všeho nebylo málo, tak je zajímavým řešením umístit tento kód jako externí soubor. Samotná aplikace poté bude v klíčovém snímku volat externí *.as soubor, který bude obsahovat veškeré skripty pro tento daný snímek a tím bude možné snadno upravovat samotný běh prezentace, aniž by bylo nutné mít Macromedia Flash vůbec nainstalován (zvláště v případě, kdy budeme "volat" externí soubory, u nichž bude docházet k časté aktualizaci). Samotný kód pro volání externích skriptů vypadá takto:

#include "scripty/promenne.as"

Tento jednoduchý zápis říká, že na daném klíčovém snímku se má "volat" soubor promenne.as ze složky scripty. Jakmile budeme chtít změnit např. odkaz na určitý externí textový soubor (bude mít nové jméno apod.) tak je možné pouze upravit promenne.as a tím bude veškerá práce velmi ulehčena.

Vzhledem k tomu, že celý tento článek je o podmínkách, tak by bylo vhodné rovněž zmínit rozdíly mezi nimi. Jak je napsáno výše, tak pracujeme s podmínkami if, else if a else, resp. s těmito "cykly". If je jasné a, myslím, že není co dodávat. Rozdíl je mezi else if a else, kdy první případ nám umožňuje (jak je uvedeno v ukázce kódu) definovat akci, která se má vykonat na základě určeného stavu, tedy vykonat něco, v závislosti na něčem. Na druhé straně je zde rovněž možnost else, kdy zde pouze definujeme co se má stát ve všech ostatních případech. Ve vztahu k naší ukázce je možné zapsat else na úplný závěr kódu, kdy můžeme například vypsat chybové hlášení v tom případě, že ani jedna z podmínek nebude splněna a tím informovat uživatele o aktuálním stavu, zatímco v opačném případě by se pouze žádná akce nevykonala a uživatel by s tímto nebyl seznámen a byl by možná "zmaten".

A to je vlastně vše. Může se zdát, že jde o velmi jednoduchý příklad, který ani není nutné uveřejňovat, nicméně opravdu často se můžete setkat s prezentacemi (jejich zdrojovými kódy), které přímo vyzývají k definici akcí na základě proměnných, avšak jsou vytvářeny pomocí tradičních GoToFrame akcí.

Sudacki Lukáš


Hodnocení článku: -1- -2- -3- -4- -5-  Aktuální hodnocení: 2.68 (1971)

Relevantní články
Žádné články


Příspěvky do diskuse o aktuálním článku
Donar31.05.17:19nechapu urcitou cast
XXX17.02.8:19tellTarget
Ukee - autor12.02.14:11jasne
Jiri Krivanek12.02.7:34??proc??
  

 

  O vydavateli | Kontakt | Ceník reklamy | Ochrana osobních dat
©2002 Grafika Publishing. Všechna práva vyhrazena!