Skapa Animate-innehåll som ska användas på mobila enheter

När du skapar Animate-innehåll för mobila enheter ska du följa några grundläggande regler. Animate-utvecklare försöker till exempel ofta undvika komplicerad grafik, för många interpoleringar och genomskinlighet.

Flash Lite-utvecklare brukar ställas inför andra utmaningar eftersom de mobila enheternas prestanda varierar så mycket. Om innehållet ska publiceras på många olika enheter, måste utvecklarna ibland skapa innehållet utifrån den minsta gemensamma nämnaren.

När du optimerar innehåll måste du ibland kompromissa. En metod kanske får innehållet att se bättre ut, medan en annan ger bättre prestanda. När du bedömer de olika kompromisserna bör du flera gånger växla mellan att testa i emulatorn och på den enhet som innehållet ska användas på. Du måste visa innehållet på den faktiska enheten för att kunna bedöma hur verklighetstrogna färgerna är, läsbarheten, fysisk samverkan, hur användargränssnittet reagerar och andra aspekter av hur enheten faktiskt används.

Obs!

Innehållet om Flash Lite gäller inte Flash CC och senare versioner. 

Riktlinjer för Flash Lite vid animering för mobila enheter

När du skapar animerat innehåll för en mobil enhet måste du ta hänsyn till processorns begränsningar. Genom att följa riktlinjerna nedan undviker du att Flash Lite-innehållet körs långsamt:

  • När du skapar en ny Flash Lite-fil kontrollerar du att dokumentet har konfigurerats på rätt sätt. Även om Animate-filer skalas utan problem, kan prestandan bli lidande om filen inte körs med den ursprungliga scenstorleken utan måste skalas i spelaren. Försök att ange dokumentets Stage-storlek så att den motsvarar upplösningen på målenheten. Ställ i Flash Player även in rätt version för Flash Lite.

  • Flash Lite kan återge vektorgrafik med låg, medelgod och hög kvalitet. Ju högre återgivningskvalitet, desto jämnare och mer exakt återger Flash Lite vektorgrafik och desto större krav ställs på enhetens processor. Om du vill skapa en avancerad animering, experimenterar du med att ändra spelarens kvalitetsinställningar och sedan noggrant testa SWF-filen. Om du vill kontrollera en SWF-fils återgivningskvalitet använder du egenskapen _quality eller kommandot SetQuality. Du kan använda värdena LOW, MEDIUM och HIGH för egenskapen _quality.

  • Begränsa antalet samtidiga övergångar. Minska antalet övergångar, eller dela upp animeringen så att en börjar när en annan slutar.

  • Använd sparsamt med genomskinlighetseffekter (alfa) på symboler eftersom de tar mycket processorkraft. Undvik särskilt övergångssymboler med alfanivåer som är inte helt ogenomskinliga (mindre än 100 %).

  • Undvik processorkrävande visuella effekter, till exempel stora masker, omfattande rörelser, alfablandning, omfattande övertoningar och komplicerade vektorer.

  • Experimentera med kombinationer av övergångar, bildruteanimeringar och ActionScript-drivna rörelser om du vill få ett mer effektivt resultat.

  • Att återge vektorovaler och -cirklar är mycket mer minneskrävande än att återge fyrhörningar. Att använda runda och ovala former tar också mer processorkraft.

  • Testa animeringar ofta på de faktiska målenheterna.

  • När ett animerat område ritas i Animate definieras en rektangulär begränsningsram runt området. Optimera ritningen genom att göra rektangeln så liten som möjligt. Undvik överlappande interpoleringar, eftersom det kombinerade området tolkas som en enda rektangel vilket ger ett större totalt område. Optimera animeringen med Animate-funktionen Visa omritningsområde.

  • Undvik att använda _alpha = 0 och _visible = false för att dölja filmklipp på skärmen. Om du bara stänger av ett filmklipps synlighet eller ändrar alfavärdet till noll, tas det ändå med i beräkningarna av linjeåtergivning, vilket kan påverka prestandan.

  • Du ska heller inte försöka att dölja ett filmklipp genom att skymma det bakom annan grafik. Det tas ändå med i spelarens beräkningar. I stället ska du flytta filmklippen helt och hållet från Stage eller ta bort dem genom att anropa removeMovieClip.

Bitmapps- och vektorgrafik i Flash Lite på mobila enheter

Flash Lite kan återge både vektor- och bitmappsgrafik. Det finns fördelar och nackdelar med båda grafiktyperna. Vilken typ du ska välja är inte alltid uppenbart och beror på ofta på flera faktorer.

Vektorgrafik representeras på ett komprimerat sätt i SWF-filer som matematiska ekvationer och återges under körning av Flash Lite-spelaren. Bitmappsgrafik däremot representeras som matriser med bildelement (pixlar), som kräver fler bytes med data. Om du använder vektorgrafik i en fil minskar därför storleken på filen och minnesanvändningen.

Med vektorgrafik bevaras också formerna när de skalas större eller mindre. Bitmappsbilderna kan se kantiga ut, eller pixlade, när de skalas.

Jämfört med bitmappar kräver vektorgrafik mer processorkraft när de återges, speciellt vektorgrafik som består av många komplicerade former och fyllningar. Om du använder för många vektorformer kan allmänna filprestanda därför försämras. Eftersom bitmappsgrafik inte kräver lika mycket processortid som vektorgrafik, är de ett bättre val för vissa filer, till exempel för en komplicerad vägkarta som ska animeras och bläddras i en mobiltelefon.

Lägg följande på minnet:

  • Undvik att använda konturer i vektorformer. Konturer kan ha en inner- och ytterkant (fyllningar har bara en) och är dubbelt så krävande att återge.

  • Hörn är enklare att återge än kurvor. När det går bör du använda jämna kanter, speciellt vid mycket små vektorformer.

  • Optimering är särskilt användbart vid mindre vektorformer som ikoner. Komplicerade ikoner kan förlora sin detaljrikedom vid återgivningen, vilket gör arbetet med att återge detaljerna onödigt.

  • Som allmän regel bör du använda bitmappar för mindre, komplicerade bilder (till exempel ikoner) och vektorgrafik för större och enklare bilder.

  • Importera bitmappsgrafiken med rätt storlek. Importera inte stora bilder och skala ned dem i Animate eftersom det slösar med filstorlek och minne under körningen.

  • Flash Lite-spelaren kan inte jämna till bitmappar. Om en bitmapp skalas eller roteras blir den klumpig. Om du måste skala eller rotera en bild bör du använda vektorgrafik i stället.

  • Text är egentligen en mycket komplicerad vektorform. Text är självklart ofta viktigt, så det går inte att undvika det helt och hållet. När text läggs till bör du undvika animering och att placera den över en animering. Du bör använda text som en bitmapp. När det gäller dynamisk text på flera rader och indatatext, cachelagras inte textsträngens radbrytning. Raderna bryts under körning och sedan beräknas brytningarna om varje gång som textfältet måste ritas om. Statiska textfält utgör inga problem, eftersom radbrytningen förberäknas under kompileringen. När det gäller dynamiskt innehåll går det inte att undvika dynamiska textfält, men du bör använda statiska textfält i stället när så är möjligt.

  • Använd genomskinlighet så lite som möjligt i PNG-filer. Animate måste beräkna omritningar även för bitmappens genomskinliga delar. När det gäller en genomskinlig PNG-fil som representerar ett förgrundselement, ska du inte exportera den genomskinliga PNG-filen i hel skärmstorlek. I stället ska du exportera den i förgrundselementets faktiska storlek.

  • Försök att gruppera bitmappslager tillsammans och vektorlager tillsammans. Olika återgivare måste implementeras för bitmapps- och vektorinnehåll, och det tar tid att växla mellan dem.

Ange komprimering av Flash Lite-bitmappar för mobila enheter

När du använder bitmappar kan du ange alternativ för bildkomprimering (per bild eller globalt för alla bitmappsbilder) som minskar storleken på SWF-filen.

Ange komprimeringsalternativ för en enskild bitmappsfil

  1. Starta Animate och skapa ett dokument.

  2. Markera en bitmapp i biblioteksfönstret.
  3. Högerklicka (i Windows) eller Ctrl-klicka (i Macintosh) på bitmappsikonen i biblioteksfönstret och välj sedan Egenskaper på snabbmenyn så att dialogrutan Egenskaper för bitmappar öppnas.
  4. Välj något av följande alternativ på snabbmenyn Komprimering:
    • Välj alternativet Fotografi (JPEG) för bilder med komplicerade färger eller variationer i färgtonerna, till exempel fotografier eller bilder med övertoningar. Med det här alternativet skapas en JPEG-fil. Markera kryssrutan Använd importerade JPEG-data om du vill använda den standardkomprimeringskvalitet som anges för den importerade bilden. Om du vill ange en ny komprimeringsinställning för kvalitet avmarkerar du kryssrutan Använd importerade JPEG-data och anger ett värde mellan 1 och 100 i rutan Kvalitet. En högre inställning skapar en bild med högre kvalitet, men filen blir också större. Anpassa värdet därefter.

    • Välj alternativet Icke förstörande (PNG/GIF) för bilder med enkla former och få färger. Med det här alternativet komprimeras bilden utan att några data försvinner.

  5. Klicka på Testa om du vill visa resultatet av filkomprimeringen.

    Jämför den ursprungliga filstorleken med den komprimerade, och bestäm dig för om den valda komprimeringsinställningen passar.

Ange komprimering för alla bitmappsbilder

  1. Välj Arkiv > Publiceringsinställningar och klicka på fliken Flash så att komprimeringsalternativen visas.
  2. Justera reglaget för JPEG-kvalitet eller ange ett värde. Ett högre värde för JPEG-kvalitet skapar en bild med högre bildkvalitet men också en större SWF-fil. En lägre bildkvalitet skapar en mindre SWF-fil. Försök med en annan inställning för att hitta den bästa kompromissen mellan storlek och kvalitet.

Optimera Flash Lite-bilder för mobila enheter

  • De flesta enheter som stöder Flash Lite kan spela upp innehåll med hastigheten 15 till 20 bilder per sekund (bps). Bildhastigheten kan vara så låg som 6 bps. Under utvecklingen ska du ange dokumentbildhastigheten till målenhetens ungefärliga uppspelningshastighet. Detta visar hur innehållet kommer att köras på en enhet med begränsad prestanda. Innan du publicerar en färdig SWF-fil anger du dokumentbildhastigheten till minst 20 bps eller högre, så att prestandan inte begränsas om enheten kan använda en högre bildhastighet.

  • När du använder gotoAndPlay bör du komma ihåg att alla bilder mellan den aktuella bilden och den begärda bilden måste initieras innan den begärda bilden spelas upp. Om många av dessa bilder har olika innehåll, kan det vara bättre att använda olika filmklipp i stället för att använda tidslinjen.

  • Att läsa in allt innehåll i förväg genom att placera det i början av filerna kan fungera bättre på skrivbordet, men filkörningen kan fördröjas om du läser in i förväg på en mobil enhet. Placera innehållet med tillräckligt avstånd i filen så att filmklippen initieras allt eftersom de används.

Optimera ActionScript för Flash Lite-innehåll på mobila enheter

På grund av bearbetningshastigheten och minnesbegränsningarna på de flesta mobila enheter ska du följa riktlinjerna nedan när du utvecklar ActionScript for Flash Lite-innehåll som ska användas på mobila enheter:

  • Gör filen och dess kod så enkel som möjligt. Ta bort filmklipp som inte används, ta bort onödiga bilder och kodloopar och undvik att använda för många eller ovidkommande bilder.

  • Att använda FOR-loopar kan vara kostsamt på grund av det extraarbete som utförs när villkoret kontrolleras vid varje iteration. När kostnaderna för den extra iterationen och looparna är jämförbara, kör du åtgärderna för sig i stället för att använda en loop. Koden kanske blir längre, men prestandan blir bättre.

  • Stoppa de bildbaserade looparna så fort som de inte längre behövs.

  • När så är möjligt bör du undvika sträng- och matrisbearbetning eftersom de kan vara processorintensiva.

  • Försök alltid att komma åt egenskaperna direkt i stället för att använda ActionScript-metoder för att hämta och ange, som är mer omständliga än andra metodanrop.

  • Hantera händelser med förstånd. Komprimera matriserna för händelseavlyssning genom att använda villkor som kontrollerar om en lyssnare finns (är inte null) innan den anropas. Rensa bort alla aktiva intervall genom att anropa clearInterval och ta bort alla aktiva lyssnare genom att anropa removeListener innan innehållet tas bort med hjälp av unloadapplication eller removeapplicationClip. Animate återsamlar inte SWF-dataminnet (till exempel från intervall och lyssnare) om några ActionScript-funktioner fortfarande refererar till SWF-data när ett filmklipp inte har lästs in.

  • När variablerna inte längre behövs tar du bort dem eller anger dem till null, så att de markeras för skräpinsamling. Om du tar bort variabler blir det enklare att optimera minnesanvändningen under körning, eftersom onödiga tillgångar då tas bort från SWF-filen. Det är bättre att ta bort variabler än att ange dem till null.

  • Du tar bort lyssnare uttryckligen från objekt genom att anropa removeListener innan skräp samlas in.

  • Om en funktion anropas dynamiskt och skickas som en fast uppsättning parametrar ska du använda call i stället för apply.

  • Gör namnområden (till exempel sökvägar) mer komprimerade så att starttiden minskar. Alla nivåer i paketet kompileras till ett IF-uttryck och orsakar ett nytt Object-anrop, så färre nivåer i sökvägen sparar tid. Till exempel en sökväg med nivåerna com.xxx.yyy.aaa.bbb.ccc.funktionsnamn gör så att ett objekt instantieras för com.xxx.yyy.aaa.bbb.ccc. Vissa Flash-utvecklare använder preprocessorprogram för att reducera sökvägen till en unik identifierare, till exempel 58923409876.funktionsnamn, innan SWF-koden kompileras.

  • Om en fil består av flera SWF-filer som använder samma ActionScript-klasser, ska du utelämna dessa klasser från SWF-filerna under kompileringen. Då blir det enklare att förkorta filens överföringstid och minneskraven vid körningen minskar.

  • Undvik att använda Object.watch och Object.unwatch eftersom varje ändring av en objektegenskap medför att spelaren måste fastställa om ett ändringsmeddelande måste skickas.

  • Om ActionScript-kod som körs vid en nyckelbild i tidslinjen tar mer än 1 sekund att kompilera, bör du dela upp koden så att den körs i flera nyckelbilder.

  • Ta bort trace-uttrycken från koden när du publicerar SWF-filen. Det gör du genom att markera kryssrutan Utelämna spårningsåtgärder på fliken Flash i dialogrutan Publiceringsinställningar.

  • Arv ökar antalet metodanrop och använder mer minne: en klass som omfattar alla funktioner som behövs är mer effektiv vid körning än en klass som ärver vissa funktioner från en överordnad klass. Därför kanske du måste kompromissa i designen mellan antalet klasser och kodens effektivitet.

  • När en SWF-fil läser in en annan SWF-fil som innehåller en anpassad ActionScript-klass (till exempel foo.bar.AnpassadKlass) och sedan slutar läsa in SWF-filen, bevaras klassdefinitionen i minnet. Om du vill spara minne tar du uttryckligen bort alla anpassade klasser i de icke inlästa SWF-filerna. Använd uttrycket delete och ange det fullständiga klassnamnet, till exempel: delete foo.bar.AnpassadKlass.

  • Begränsa användningen av globala variabler, eftersom de inte markeras för skräpinsamling om filmklippet som definierar dem tas bort.

  • Undvik att använda standardkomponenter för användargränssnittet (finns i fönstret Komponenter i Flash). Dessa komponenter är till för att köras på stationära datorer och är inte optimerade för mobila enheter.

  • När så är möjligt bör du undvika djupt kapslade funktioner.

  • Undvik att referera till variabler, objekt eller funktioner som inte finns. I Flash Lite 2 slås referenser till variabler som inte finns upp långsammare än i skrivbordsversionen av Flash Player, vilket kraftigt kan påverka prestandan.

  • Undvik att definiera funktioner genom att använda anonym syntax. Till exempel mittObj.händelsenamn= funktion{ ...}. Funktioner som definieras uttryckligen är mer effektiva, till exempel funktion minFunk { ...}; mittObj.händelsenamn= minFunk;.

  • Minimera användningen av matematikfunktioner och flyttal. När dessa värden beräknas blir prestandan sämre. Om du måste använda matematikrutiner bör du beräkna värdena i förväg och lagra dem i en variabelmatris. Det går mycket snabbare att hämta värden från en datatabell än att beräkna dem i Flash under körning.

Hantera filminne i Flash Lite för mobila enheter

I Flash Lite rensas minnet med jämna mellanrum från objekt och variabler som en fil inte längre refererar till. Detta kallas för skräpinsamling. Flash Lite kör skräpinsamlingen en gång per minut, eller när användningen av filminnet plötsligt ökar med 20 % eller mer.

Även om du inte kan styra hur och när Flash Lite utför en skräpinsamling kan du ändå frigöra det minne som inte behövs. När det gäller tidslinjevariabler eller globala variabler ska du använda uttrycket delete när du frigör minne som används av ActionScript-objekt. När det gäller lokala variabler, till exempel en variabel som definieras i en funktionsdefinition, kan du inte använda uttrycket delete för att frigöra ett objekts minne, men du kan ange den variabel som refererar till objektet till null. Då frigörs minnet som objektet använder, förutsatt att det inte finns några andra referenser till det objektet.

I de två kodexemplen nedan visas hur du frigör minne som objekten använder genom att ta bort variabeln som refererar till dessa objekt. Exemplen är identiska, utom att det första skapar en tidslinjevariabel och det andra en global variabel.

// 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);

Så som tidigare har nämnts kan du inte använda uttrycket delete för att frigöra minne som en lokal funktionsvariabel använder. I ställer anger du variabelreferensen till null, vilket har samma effekt som att använda 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();

Läsa in data för mobila enheter i Flash Lite

När du utvecklar filer för mobila enheter måste du minimera den mängd med data som ska läsas in vid varje tillfälle. Om du läser in externa data till en Flash Lite-fil (till exempel med XML.load), kanske enhetens operativsystem skapar ett minnesfel om inte tillräckligt med minne allokeras för inkommande data. Detta kan även inträffa om det totala tillgängliga minnet inte räcker till.

Anta att en fil försöker att läsa en XML-fil som är 100 kB stor, men enhetens operativsystem bara har allokerat 30 kB för att hantera den inkommande dataströmmen. I det här fallet visas ett felmeddelande för användaren i Flash Lite, som anger att det inte finns tillräckligt med minne tillgängligt.

Om du vill kunna läsa in stora mängder data ska du gruppera data i mindre delar, till exempel i flera XML-filer, och göra flera datainläsningsanrop för varje del. Storleken på varje del med data, och därför antalet datainläsningsanrop som du måste göra, varierar efter enhet och fil. Du skapar en bra balans mellan antalet dataförfrågningar och risken för minnesfel genom att testa filerna på många olika målenheter.

Bäst prestanda får du genom att undvika att läsa in och analysera XML-filer, om det går. I stället ska du lagra data i enkla namn/värde-par och läsa in data från en textfil med loadVars eller från förkompilerade SWF-filer.

Undanta klasser från kompilering för Flash Lite

Om du vill minska storleken på en SWF-fil bör du undanta klasser från kompileringen men ha kvar möjligheten att komma åt och använda dem för typkontroller. Försök till exempel med detta om du utvecklar en fil som använder flera SWF-filer eller delade bibliotek, särskilt de som använder många av samma klasser. Genom att undanta klasser blir det enklare att undvika dubblettklasser i dessa filer.

  1. Skapa en ny XML-fil.
  2. Ge XML-filen namnet FLA_filnamn_exclude.xml, där FLA_filnamn är namnet på FLA-filen utan filnamnstillägget .fla. Om till exempel FLA-filen heter sellStocks.fla måste XML-filnamnet vara sellStocks_exclude.xml.
  3. Spara filen i samma katalog som FLA-filen.
  4. Placera följande taggar i XML-filen:
    <excludeAssets> 
        <asset name=”className1” /> 
        <asset name=”className2” /> 
    </excludeAssets>

    De värden som anges för namnattributen i <asset>-taggarna är namnen på klasserna som ska undantas från SWF-filen. Lägg till så många som behövs för filen. Följande XML-fil undantar klasserna mx.core.UIObject och mx.screens.Slide från SWF-filen:

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

Denna produkt är licensierad enligt en Creative Commons Erkännande-Ickekommersiell-Dela Lika 3.0 Unported-licens  Twitter™- och Facebook-inlägg omfattas inte av villkoren i Creative Commons-licensen.

Juridiska meddelanden   |   Onlinesekretesspolicy