Vytváření obsahu v aplikaci Animate pro použití na mobilních zařízení

Chcete-li v aplikaci Animate vytvářet obsah pro mobilní zařízení, dodržujte několik základních principů. Například vývojáři, kteří pracují v aplikaci Animate, se často snaží vyhnout příliš složitým kresbám a nadměrnému používání funkcí doplnění pohybu a průhlednosti.

Vývojáři v aplikaci Flash Lite musí řešit další problémy, protože výkonnost různých mobilních zařízení se podstatně liší. Pokud je nutné vydat obsah pro více různých zařízení, vývojáři někdy musí aplikace uzpůsobit podle nejnižšího společného jmenovatele.

Optimalizace obsahu pro mobilní zařízení vyžaduje kompromisy. Jedna technika může například zajistit lepší vzhled obsahu, zatímco jiná povede k lepšímu výkonu. Při vyhodnocování těchto kompromisů budete opakovaně přecházet mezi testováním v emulátoru a testováním na cílovém zařízení. Obsah je třeba vidět na skutečném zařízení, aby bylo možné vyhodnotit věrnost barev, čitelnost textu, reálné interakce, odezvu uživatelského rozhraní a další aspekty reálné zkušenosti s mobilním zařízením.

Poznámka:

Obsah týkající se aplikace Flash Lite nelze použít pro aplikaci Flash CC a vyšší verze. 

Pravidla Flash Lite pro animace na mobilních zařízeních

Při vytváření animovaného obsahu pro mobilní zařízení mějte vždy na paměti omezení daná procesorem mobilního zařízení. Dodržováním následujících pravidel můžete předejít pomalému přehrávání obsahu Flash Lite:

  • Při vytváření nového souboru Flash Lite zkontrolujte, že je dokument správně nastaven. Přestože velikost souborů Animate lze plynule měnit, může dojít k omezení výkonu, pokud soubor nebude spuštěn s původní velikostí plochy a přehrávač bude muset změnit jeho velikost. Pokuste se nastavit velikost plochy dokumentu tak, aby odpovídala rozlišení cílového zařízení. Nastavte také přehrávač Flash Player na správnou verzi prostředí Flash Lite.

  • Aplikace Flash Lite může vykreslovat vektorové grafiky v nízké, střední a vysoké kvalitě. Čím vyšší je kvalita vykreslování, tím plynuleji a přesněji bude Flash Lite vykreslovat vektorové grafiky a tím vyšší budou požadavky na procesor zařízení. Chcete-li vytvořit složitou animaci, experimentujte s nastavením kvality v přehrávači a pak soubor SWF důkladně otestujte. Chcete-li nastavit kvalitu vykreslování souboru SWF, použijte vlastnost_quality nebo příkaz SetQuality. Platné hodnoty pro vlastnost _quality jsou LOW, MEDIUMHIGH.

  • Omezte počet souběžných animací s doplněním pohybu. Omezte počet animací s doplněním pohybu nebo nastavte animace za sebou tak, aby jedna začínala, když druhá končí.

  • Omezte používání efektů průhlednosti (alfa) pro symboly, protože jsou náročné na výkon procesoru. Zejména se vyhněte doplnění pohybu symbolů s úrovněmi alfa, které nejsou zcela neprůhledné (méně než 100 %).

  • Vyhněte se vizuálním efektům náročným na výkon procesoru, jako jsou velké masky, rozsáhlý pohyb, prolnutí alfa, široké přechody a složité vektory.

  • Snažte se dosáhnout co nejefektivnějších výsledků experimentováním s kombinacemi doplnění pohybu, animací s klíčovými snímky a pohybů řízených pomocí skriptu jazyka ActionScript.

  • Vykreslování vektorových elips a kruhů je paměťově mnohem náročnější, než vykreslování čtyřúhelníků. Používání zaoblených a elipsovitých tahů také podstatně zvyšuje využití procesoru.

  • Často testujte animace na skutečných koncových zařízeních.

  • Když aplikace Animate vykresluje oblast s animací, definuje kolem ní obdélníkový ohraničovací rámeček. Optimalizujte vykreslování tím, že bude tento obdélník co nejmenší. Vyhněte se překrývání doplnění pohybu, protože Animate interpretuje takto sloučené plochy jako jeden obdélník a tím vznikne větší celková oblast. K optimalizaci animace v aplikaci Animate použijte funkci Zobrazit překreslované oblasti.

  • Nepoužívejte parametry _alpha = 0_visible = false pro skrytí filmových klipů na obrazovce. Pokud jednoduše vypnete viditelnost filmového klipu nebo změníte jeho hodnotu alfa na nulu, bude klip i nadále zahrnut ve výpočtech vykreslení, což může mít vliv na výkon.

  • Podobně se nepokoušejte skrýt filmový klip jeho umístěním za jinou část kresby. Byl by přesto zahrnutý do výpočtů v přehrávači. Místo toho přesuňte filmové klipy zcela mimo plochu nebo je odstraňte voláním funkce removeMovieClip.

Bitmapové a vektorové grafiky Flash Lite v mobilních zařízeních

Aplikace Flash Lite umí vykreslovat vektorové i bitmapové grafiky. Každý typ grafiky má své výhody i nevýhody. Důvody pro použití vektorové grafiky místo bitmapové nejsou vždy jednoznačné a rozhodnutí často závisí na více faktorech.

Vektorové grafiky jsou v souborech SWF kompaktně vyjádřené v podobě matematických rovnic a vykreslují se za běhu v přehrávači Flash Lite. Bitmapové grafiky jsou naproti tomu vyjádřené jako pole obrazových prvků (obrazových bodů), které vyžadují více bytů dat. Proto použití vektorových grafik v souboru může pomoci zmenšit velikost souboru a využití paměti.

Vektorové grafiky si také při změně velikosti zachovají plynulé tvary. Bitmapové obrazy se mohou při změně velikosti zobrazovat hrubě čtverečkované nebo rozdělené na jednotlivé obrazové body.

Ve srovnání s bitmapami vyžadují vektorové grafiky větší výkon při vykreslování, obzvláště pokud obsahují mnoho složitých tvarů a výplní. V důsledku toho může široké využití vektorových tvarů někdy snížit celkový výkon pro soubor. Protože bitmapové grafiky nevyžadují tolik času na vykreslení jako vektorové grafiky, představují pro některé soubory lepší volbu. Příkladem může být složitá automapa, která se bude animovat a posouvat na displeji mobilního telefonu.

Mějte na paměti následující pravidla:

  • Nepoužívejte obrysy u vektorových tvarů. Obrysy mají vnitřní a vnější okraj (výplně mají pouze jeden) a jejich vykreslení vyžaduje dvojnásobek výkonu.

  • Vykreslování rohů je jednodušší než vykreslování křivek. Pokud to je možné, používejte rovné okraje, zejména pro velmi malé vektorové tvary.

  • Optimalizace je obzvláště užitečná v případě malých vektorových tvarů, například ikon. Složité ikony mohou po vykreslení ztratit detaily a výkon vynaložený na vykreslení detailů je zbytečně ztracen.

  • Obecně platí, že bitmapy jsou vhodné pro malé, složité obrazy (například pro ikony) a vektorové grafiky pro větší a jednodušší obrazy.

  • Importujte bitmapové grafiky ve správné velikosti; neimportujte velké grafiky a nezmenšujte je v aplikaci Animate, protože byste zbytečně zvětšovali velikost souboru a nároky na paměť za běhu.

  • Přehrávač Flash Lite nepodporuje vyhlazování bitmap. Po změně velikosti nebo otočení bitmapy může mít bitmapa hrubý vzhled. Pokud je změna velikosti nebo otočení grafiky nezbytné, zvažte místo toho použití vektorové grafiky.

  • Text je v podstatě velmi složitý vektorový tvar. Text je samozřejmě často tím nejdůležitějším, takže se mu lze jen málokdy zcela vyhnout. Když je zapotřebí text, neanimujte ho ani ho neumísťujte přes animaci. Zvažte použití textu ve tvaru bitmapy. Pro víceřádkový dynamický a vstupní text se zalomení řádku textového řetězce neukládá do vyrovnávací paměti. Animate zalamuje řádky za běhu a přepočítává tato zalomení vždy, když je nutné textové pole překreslit. Statická textová pole nejsou problematická, protože zalomení řádku se předem vypočítá v době kompilace. Pro dynamický obsah je použití dynamických textových polí nevyhnutelné, ale pokud to je možné, zvažte místo toho použití statických textových polí.

  • Minimalizujte používání průhlednosti v souborech PNG; Animate musí vypočítat překreslení i pro průhledné části bitmapy. Například průhledný soubor PNG, představující element popředí, neexportujte jako průhledný PNG v plné velikosti obrazovky. Místo toho ho exportujte ve skutečné velikosti elementu popředí.

  • Pokuste se seskupit zvlášť vrstvy bitmap a zvlášť vrstvy vektorů. Animate musí použít odlišné vykreslovače pro bitmapový a vektorový obsah a přepínání mezi vykreslovači vyžaduje čas.

Nastavení komprese bitmap Flash Lite pro mobilní zařízení

Při používání bitmap můžete nastavit volby komprese obrazu (pro jednotlivé obrazy nebo globálně pro všechny bitmapové obrazy), které zmenšují velikost souboru SWF.

Nastavení voleb komprese pro jednotlivé bitmapové soubory

  1. Spusťte aplikaci Animate a vytvořte dokument.

  2. Vyberte bitmapu v okně Knihovna.
  3. Klikněte pravým tlačítkem (Windows) nebo se stisknutou klávesou Ctrl (Macintosh) na ikonu bitmapy v okně Knihovna, z kontextové nabídky vyberte Vlastnosti a tím otevřete dialogové okno Vlastnosti bitmapy.
  4. V rozbalovací nabídce Komprese vyberte jednu z následujících voleb:
    • Vyberte volbu Fotografie (JPEG) pro obrazy se složitými gradacemi barev nebo tónů, jako jsou fotografie nebo obrazy s výplněmi používajícími přechody. Tato volba vytvoří soubor JPEG. Pokud chcete použít výchozí kvalitu komprese, určenou pro importovaný obraz, zaškrtněte pole Použít importovaná data JPEG. Chcete-li určit nové nastavení kvality komprese, zrušte zaškrtnutí pole Použít importovaná data JPEG a do textového pole Kvalita zadejte hodnotu mezi 1 a 100. Vyšší nastavení vytvoří obraz s vyšší kvalitou, ale také větší soubor, takže hodnotu nastavte podle potřeby.

    • Vyberte volbu Bezeztrátová (PNG/GIF) pro obrazy s jednoduchými tvary a s málo barvami. Tato možnost komprimuje obraz pomocí bezeztrátové komprese, která nezpůsobuje ztrátu dat.

  5. Klikněte na Testovat, pokud chcete posoudit výsledky komprese souboru.

    Porovnejte velikost původního souboru s velikostí komprimovaného souboru a rozhodněte se, zda je vybrané nastavení komprese přijatelné.

Nastavení komprese pro všechny bitmapové obrazy

  1. Vyberte Soubor > Nastavení publikování a pak kliknutím na záložku Flash zobrazte volby komprese.
  2. Nastavte posuvníkem kvalitu obrazu JPEG nebo zadejte hodnotu. Vyšší hodnota kvality JPEG vytvoří obraz s vyšší kvalitou, ale také větší soubor SWF. Nižší kvalita obrazu vytvoří menší soubor SWF. Zkuste různá nastavení a určete nejvýhodnější kompromis mezi velikostí a kvalitou.

Optimalizace snímků Flash Lite pro mobilní zařízení

  • Většina zařízení podporujících formát Flash Lite přehrává obsah rychlostí asi 15 až 20 snímků za sekundu (fps). Kmitočet snímků může být i pouze 6 fps. Během vývoje nastavte počet snímků za sekundu dokumentu na přibližnou rychlost přehrávání cílového zařízení. Zjistíte tak, jak se bude obsah přehrávat na zařízení s omezeným výkonem. Před publikováním finálního souboru SWF nastavte kmitočet snímků dokumentu alespoň na 20 fps nebo vyšší, abyste zabránili omezení výkonu v případě, že zařízení podporuje i vyšší počet snímků za sekundu.

  • Při použití funkce gotoAndPlay si uvědomte, že každý snímek mezi stávajícím a požadovaným snímkem se musí inicializovat předtím, než Animate přehraje požadovaný snímek. Pokud mnoho těchto snímků obsahuje odlišný obsah, může být efektivnější použít různé filmové klipy místo použití časové osy.

  • Přestože na stolních počítačích má smysl předběžné načtení celého obsahu pomocí jeho uložení na začátek souboru, u mobilních zařízení může předběžné načtení zpozdit spuštění souboru. Obsah rozmístěte v souboru tak, aby se filmové klipy inicializovaly až když se použijí.

Optimalizace ActionScriptu pro obsah Flash Lite na mobilních zařízeních

Vzhledem k omezené rychlosti zpracování a omezené paměti většiny mobilních zařízení dodržujte při vývoji ActionScriptu pro obsah Flash Lite používaný v mobilních zařízeních následující pravidla:

  • Udržujte soubor a jeho kód co nejjednodušší. Odstraňte nepoužívané filmové klipy, zbytečné snímky a cykly kódu a vyhněte se příliš vysokému počtu snímků nebo nepotřebným snímkům.

  • Použití cyklů FOR může být náročné na výkon, protože se podmínka kontroluje při každém opakování. Když jsou nároky na iteraci a na režii cyklu srovnatelné, provádějte vícenásobné operace jednotlivě namísto použití cyklu. Kód může být sice delší, ale výkon se zlepší.

  • Jakmile není opakování založené na snímcích potřeba, zastavte ho.

  • Pokud to je možné, vyhněte se zpracování řetězců a polí, protože je náročné na výkon procesoru.

  • Vždy se pokoušejte přistupovat k vlastnostem přímo, namísto používání metod jazyka ActionScript pro získání a nastavení hodnoty, které mají větší režii než volání ostatních metod.

  • Spravujte události promyšleně. Udržujte pole posluchačů (listener) kompaktní pomocí podmínek, ověřujících, že posluchač existuje (není null), ještě před jeho voláním. Vymažte všechny aktivní intervaly voláním funkce clearInterval a odstraňte všechny aktivní posluchače voláním funkce removeListener ještě před odstraněním obsahu pomocí funkcí unloadapplication nebo removeapplicationClip. Animate neuvolní paměť pro data SWF (například z intervalů a posluchačů) pokud některé funkce ActionScriptu při odstraňování filmového klipu z paměti ještě stále odkazují na data SWF.

  • Pokud proměnné již nepotřebujete, odstraňte je nebo je nastavte na null, čímž se označí pro uvolnění paměti. Odstraněním proměnných pomůžete optimalizovat využití paměti za běhu, protože nepotřebné prostředky se ze souboru SWF odstraní. Proměnné je vhodnější odstranit, než je nastavit na null.

  • Před vyčištěním paměti explicitně odstraňte z objektů posluchače tím, že zavoláte funkci removeListener.

  • Pokud je funkce volaná dynamicky a předává pevnou sadu parametrů, použijte call místo apply.

  • Jmenné prostory (například cesty) vytvořte kompaktnější, abyste zkrátili čas spouštění. Každá úroveň v balíku se zkompiluje do příkazu IF a způsobí nové volání Object, takže menší počet úrovní v cestě ušetří čas. Například cesta s úrovněmi com.xxx.yyy.aaa.bbb.ccc.názevFunkce způsobí vytvoření instance objektu pro com.xxx.yyy.aaa.bbb.ccc. Někteří vývojáři ve Flashi používají software předprocesoru k redukci cesty na jedinečný identifikátor, například 58923409876.názevFunkce, před zkompilováním kódu SWF.

  • Pokud je soubor tvořen několika soubory SWF, které používají stejné třídy jazyka ActionScript, vylučte tyto třídy během kompilace z vybraných souborů SWF. To může zkrátit dobu stahování souboru a požadavky na paměť za běhu.

  • Vyhněte se používání funkcí Object.watchObject.unwatch, protože každá změna vlastnosti objektu vyžaduje, aby přehrávač určil, zda je nutné odeslat oznámení o změně.

  • Pokud kód ActionScript prováděný v klíčovém snímku na časové ose vyžaduje k provedení více než 1 sekundu, zvažte rozdělení tohoto kódu tak, aby byl prováděn v několika klíčových snímcích.

  • Při publikování souboru SWF odstraňte z kódu příkazy trace. To provedete tak, že zaškrtnete pole Vynechat akce sledování v záložce Flash v dialogovém okně Nastavení publikování.

  • Dědičnost zvyšuje počet volání metod a používá více paměti: třída, která zahrnuje všechny své funkce, je za běhu efektivnější než třída, která zdědila některé své funkce z nadřazené třídy. Proto může být nutné dělat při návrhu kompromisy mezi rozšiřitelností tříd a výkonností kódu.

  • Když jeden soubor SWF načítá jiný soubor SWF, který obsahuje speciální třídu jazyka ActionScript (například foo.bar.VlastníTřída) a pak soubor SWF uvolní, definice této třídy zůstane v paměti. Chcete-li ušetřit paměť, explicitně odstraňte všechny vlastní třídy v uvolněných souborech SWF. Použijte příkaz delete a určete plně kvalifikovaný název třídy, například: delete foo.bar.VlastníTřída.

  • Omezte používání globálních proměnných. Protože při odebrání filmového klipu, který je definoval, nejsou při čištění paměti označeny k uvolnění.

  • Nepoužívejte standardní komponenty uživatelského rozhraní (dostupné v panelu Komponenty v programu Flash). Tyto komponenty jsou navrženy pro práci na stolních počítačích a nejsou optimalizované pro spouštění na mobilních zařízeních.

  • Vyhýbejte se co nejvíce hluboce vnořeným funkcím.

  • Nepoužívejte odkazy na neexistující proměnné, objekty nebo funkce. Ve srovnání s verzí přehrávače Flash Player pro stolní počítače vyhledává aplikace Flash Lite 2 odkazy na neexistující proměnné pomalu, což může výrazně ovlivnit výkon.

  • Nedefinujte funkce s použitím anonymní syntaxe. Například mujObj.eventName = function{ ...}. Explicitně definované funkce jsou efektivnější, například function mojeFunkce { ...}; mujObj.eventName = mojeFunkce;.

  • Minimalizujte používání matematických funkcí a čísel s pohyblivou řádovou čárkou. Výpočty těchto hodnot zpomalují výkon. Pokud musíte používat matematické procedury, zvažte vypočítání hodnot předem a jejich uložení do pole proměnných. Načtení hodnot z datové tabulky je mnohem rychlejší, než když je Flash musí počítat v době běhu.

Správa paměti souboru Flash Lite pro mobilní zařízení

Aplikace Flash Lite pravidelně odstraňuje z paměti všechny objekty a proměnné, na které již soubor neodkazuje. Říká se tomu čištění paměti (garbage collection). Aplikace Flash Lite spouští proces čištění paměti každých 60 sekund nebo vždy, když se využití paměti souboru náhle zvýší o 20 % nebo více.

Přestože nemůžete kontrolovat, jak ani kdy aplikace Flash Lite toto čištění paměti provádí, můžete část nepotřebné paměti uvolnit sami záměrně. Pro proměnné časové osy a globální proměnné použijte k uvolnění paměti, kterou objekty jazyka ActionScript používají, příkaz delete. Pro lokální proměnné, například proměnné definované v rámci definice funkce, nemůžete k uvolnění paměti objektu použít příkaz delete, ale můžete proměnnou, která na objekt odkazuje, nastavit na null. Za předpokladu, že na tento objekt neexistují žádné další odkazy, se tím uvolní paměť, kterou tento objekt používá.

Následující dva příklady kódu ukazují, jak lze odstraněním proměnné, která odkazuje na objekty, uvolnit paměť, kterou tyto objekty používají. Příklady jsou identické, kromě toho, že první příklad vytváří proměnnou časové osy a druhý vytváří globální proměnnou.

// First case: variable attached to a movie or 
// movie clip timeline 
// 
// Create the Date object. 
var mcDateObject = new Date(); 
// Returns the current date as a string. 
trace(mcDateObject); 
// Delete the object. 
delete mcDateObject; 
// Returns undefined. 
trace(mcDateObject); 
// 
// Second case: global variable attached to a movie or 
// movie clip timeline 
// 
// Create the Date object. 
_global.gDateObject = new Date(); 
// Returns the current date as a string. 
trace(_global.gDateObject); 
// Delete the object. 
delete _global.gDateObject; 
// Returns undefined. 
trace(_global.gDateObject);

Jak bylo uvedeno výše, k uvolnění paměti, kterou využívá lokální proměnná funkce, nelze použít příkaz delete. Místo toho nastavte odkaz proměnné na null, což má stejný efekt jako použití příkazu delete.

function func() 
{ 
    // Create the Date object. 
    var funcDateObject = new Date(); 
    // Returns the current date as a string. 
    trace(funcDateObject); 
    // Delete has no effect. 
    delete funcDateObject; 
    // Still returns the current date. 
    trace(funcDateObject); 
    // Set the object reference to null. 
    funcDateObject = null; 
    // Returns null. 
    trace(funcDateObject); 
} 
// Call func() function. 
func();

Načítání dat pro mobilní zařízení ve Flash Lite

Při vývoji souborů pro mobilní zařízení minimalizujte objem dat, která chcete načítat najednou. Pokud načítáte externí data do souboru Flash Lite (například pomocí příkazu XML.load), může operační systém zařízení vygenerovat chybu „chyba paměti“, pokud pro přicházející data není přidělen dostatek paměti. Tato situace může nastat i v případě, že celková velikost zbývající paměti je dostatečná.

Předpokládejme například, že se některý soubor pokusí načíst soubor XML o velikosti 100 KB, ale operační systém zařízení přidělil pro práci s tímto příchozím datovým tokem jen 30 kB. V takovém případě zobrazí aplikace Flash Lite uživateli chybovou zprávu o nedostatku paměti.

Chcete-li načíst velký objem dat, seskupte data do menších částí – například do několika souborů XML – a použijte více volání pro načtení jednotlivých částí dat. Velikost jednotlivých částí dat a tím i počet volání pro načtení dat, která musíte použít, se liší podle zařízení a souboru. Chcete-li určit vhodné vyvážení mezi počtem požadavků o data a pravděpodobností chyby paměti, otestujte soubory na různých cílových zařízeních.

Chcete-li dosáhnout optimálního výkonu, pokud možno se vyhněte načítání a analýze souborů XML. Místo toho uložte data v jednoduchých párech název/hodnota a načítejte data z textového souboru pomocí loadVars nebo z předem zkompilovaných souborů SWF.

Vyloučení tříd z kompilace pro Flash Lite

Chcete-li zmenšit velikost souboru SWF, zvažte vyloučení tříd z kompilace se zachováním možnosti přístupu k nim a jejich použití pro kontrolu typu. Například pokud vyvíjíte soubor využívající několik souborů SWF nebo sdílených knihoven, zvláště pokud využívají mnoho stejných tříd, zkuste následující postup. Vyloučení tříd pomáhá vyhnout se duplicitě tříd v těchto souborech.

  1. Vytvořte nový soubor XML.
  2. Pojmenujte soubor XML FLA_názevSouboru_exclude.xml, kde FLA_názevSouboru je název souboru FLA bez přípony .fla. Pokud se například soubor FLA jmenuje prodejAkcií.fla, název souboru XML musí být prodejAkcií_exclude.xml.
  3. Uložte soubor do stejné složky, ve které je soubor FLA.
  4. Do souboru XML umístěte následující tagy:
    <excludeAssets> 
        <asset name=”className1” /> 
        <asset name=”className2” /> 
    </excludeAssets>

    Hodnoty, specifikované pro atributy názvu v tagu <asset> představují názvy tříd, které by měly být vyloučeny ze souboru SWF. Přidejte jich tolik, kolik je pro soubor potřeba. Například následující soubor XML vyloučí ze souboru SWF třídy mx.core.UIObjectmx.screens.Slide:

    <excludeAssets> 
        <asset name=”mx.core.UIObject” /> 
        <asset name=”mx.screens.Slide” /> 
    </excludeAssets>

Tato práce podléhá licenci Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License.  Na příspěvky ze služeb Twitter™ a Facebook se nevztahují podmínky licence Creative Commons.

Právní upozornění   |   Zásady ochrany osobních údajů online