Allt medan arbetet i Flash växer, oberoende av om du skapar ett program eller komplicerade skriptanimeringar, behöver du även tänka på prestanda och optimering. När du har ett innehåll som är statiskt (t.ex. en rektangulär Shape-instans) kommer innehållet inte att optimeras i Flash Player och AIR. När du ändrar rektangelns position ritas därför hela Shape-instansen om i Flash Player eller AIR.
Du kan cachelagra specifika visningsobjekt för att förbättra SWF-filens prestanda. Visningsobjektet är en
yta
, egentligen en bitmappsversion av instansens vektordata, som du troligtvis inte behöver ändra mycket under SWF-filens livslängd. Detta innebär att instanser där cachelagring är aktiverat inte ritas om kontinuerligt när SWF-filen spelas upp, vilket innebär att SWF-filen återges snabbare.
Obs!
Du kan uppdatera vektordata vilket medför att ytan skapas om på nytt. Detta innebär att vektordata som cachelagrats i ytan inte behöver vara desamma för hela SWF-filen.
Inställning av visningsobjektets egenskap
cacheAsBitmap
till
true
får visningsobjektet att cachelagra en bitmappsrepresentation av sig själv. I Flash Player och AIR skapas ett ytobjekt för instansen som en cachelagrad bitmapp och inte som vektordata. Om du ändrar gränserna för visningsobjektet skapas ytan om i stället för att storleken ändras. Ytor kan kapslas i andra ytor. Bitmappen för den underordnade ytan kopieras till den överordnade ytan. Mer information finns i
Aktivera bitmappscachning
.
Klassen DisplayObjects egenskaper
opaqueBackground
och
scrollRect
är båda relaterade till bitmappscachning med egenskapen
cacheAsBitmap
. Trots att dessa tre egenskaper är oberoende av varandra fungerar egenskaperna
opaqueBackground
och
scrollRect
bäst när ett objekt cachelagras som en bitmapp. Du ser prestandaförbättringar för egenskaperna
opaqueBackground
och
scrollRect
endast om du anger
cacheAsBitmap
till
true
. Mer information om rullning av visningsobjektinnehåll finns i
Panorering och rullning av visningsobjekt
. Mer information om inställning av ogenomskinlig bakgrund finns i
Inställning av en ogenomskinlig bakgrundsfärg
.
Mer information om alfakanalsmaskering, som kräver att du anger egenskapen
cacheAsBitmap
till
true
, finns i
Maskering av visningsobjekt
.
Aktivera cachelagring
När du aktiverar cachelagring för ett visningsobjekt skapas en yta. Detta medför flera fördelar som att exempelvis komplexa vektoranimeringar återges snabbare. Det finns flera olika scenarier då du vill att cachelagring ska vara aktiverad. Det kan verka som om du alltid bör ha cachelagring aktiverad för att förbättra SWF-filens prestanda, men det finns situationer då cachelagring inte förbättrar prestandan eller till och med försämrar den. I detta avsnitt beskrivs tillfällen då cachelagring ska användas och när vanliga visningsobjekt ska användas.
Den övergripande prestandan för cachelagrade data beror på hur komplexa dina vektordata är i instansen, hur mycket data du ändrar och om du anger egenskapen
opaqueBackground
eller inte. Om du ändrar små områden är skillnaden mellan att använda en yta och att använda vektordata försumbar. Du kan testa båda scenarierna innan du distribuerar programmet.
Använda bitmapps-cachning
Följande exempel är typiska scenarier då du kan se stora fördelar med att aktivera bitmappscachning.
-
Komplex bakgrundsbild: Ett program som innehåller en detaljerad och komplex bakgrundsbild av vektordata (kanske en bild där du använt kommandot för en bitmappskalkering eller teckning som du skapat i Adobe Illustrator®). Du kanske animerar tecken över bakgrunden, vilket gör att animeringen blir långsammare eftersom bakgrunden fortlöpande måste generera om vektorinformationen. Om du vill få förbättrad prestanda kan du ange egenskapen
opaqueBackground
för visningsobjektet i bakgrunden till
true
. Bakgrunden återges nu som en bitmapp och kan ritas om snabbare så att animeringen spelas upp mycket snabbare.
-
Rullande textfält: Ett program som visar mycket text i ett rullande textfält. Du kan placera textfältet i ett visningsobjekt som du anger som rullningsbart med rullningsgränser (egenskapen
scrollRect
). Nu aktiveras snabb pixelrullning för den angivna instansen. När en användare rullar visningsobjektinstansen, förskjuts de rullande pixlarna uppåt i Flash Player eller AIR och det nyexponerade området genereras i stället för att hela textfältet genereras om.
-
Fönstersystem: Ett program med komplexa system med överlappande fönster. Varje fönster kan öppnas och stängas (till exempel webbläsarfönster). Om du markerar varje fönster som en yta (anger att egenskapen
cacheAsBitmap
ska vara
true
) kommer varje fönster att isoleras och cachelagras. Användarna kan dra fönstren så att de överlappar varandra utan att vektorinnehållet för varje fönster behöver genereras om.
-
Alfakanalsmaskering: När du använder alfakanalsmaskering måste du ange egenskapen
cacheAsBitmap
till
true
. Mer information finns i
Maskering av visningsobjekt
.
Att aktivera bitmappscachning i alla dessa scenarier förbättrar svarstiderna och interaktiviteten i programmet tack vare att vektorgrafiken optimerats.
När du dessutom använder ett filter för ett visningsobjekt anges
cacheAsBitmap
automatiskt till
true
, även om du explicit anger det som
false
. Om du rensar alla filter för ett visningsobjekt ändras egenskapen
cacheAsBitmap
till vad den senast ställts in på.
Undvika bitmappscachning
Om du använder den här funktionen under fel omständigheter kan det påverka SWF-filens prestanda negativt. Tänk på följande riktlinjer när du använder bitmappscachning:
-
Använd inte för många ytor (visningsobjekt med cachelagring aktiverad). För varje yta används mer minneskapacitet än för vanliga visningsobjekt, vilket innebär att du bara ska aktivera ytor när du vill förbättra återgivningsprestandan.
En cachelagrad bitmapp kan använda betydligt mer minne än ett vanligt visningsobjekt. Om till exempel en Sprite-instans på scenen har storleken 250 x 250 pixlar kunde den vid en cachelagring ha använt 250 kB i stället för 1 kB vid en vanlig (ej cachelagrad) Sprite-instans.
-
Undvik inzoomning i cachelagrade ytor. Om du använder för mycket bitmappscachning förbrukas en stor mängd minne (se punkten ovan), speciellt om du zoomar in i innehållet.
-
Använd ytor för visningsobjektsinstanser som i huvudsak är statiska (ej animerade). Du kan dra eller flytta instansen, men instansinnehållet bör inte animeras eller ändras allt för mycket. (Animering eller innehållsändring är enklare att genomföra med en MovieClip-instans som innehåller animering eller en Video-instans.) Om du till exempel roterar eller omformar en instans, växlar instansen mellan ytan och vektorinformationen. Det är en svår bearbetning som påverkar SWF-filen negativt.
-
Om du blandar ytor med vektordata ökas antalet bearbetningar som behöver göras i Flash Player och AIR (och ibland i datorn). Gruppera ytorna så mycket som möjligt när du skapar fönsterhanteringsprogram.
-
Cachelagra inte objekt vars grafik ändras ofta. Varje gång du skalar, skevar eller roterar visningsobjektet, ändrar alfa- eller färgomformning, flyttar underordnade visningsobjekt eller ritar med egenskapen graphics, ritas bitmappscachen om. Om detta sker vid varje bildruta måste objektet ritas till en bitmapp och kopieras till scenen, vilket är mer krävande än att bara rita det ocachade objektet på scenen. Huruvida det är mest effektivt att använda cachning eller uppdateringsfrekvens beror på hur komplext och hur stort visningsobjektet är. Det kan du bara avgöra genom att testa det aktuella innehållet.
Aktivera bitmappscachning
Om du vill aktivera bitmappscachning för visningsobjekt anger du egenskapen
cacheAsBitmap
till
true
:
mySprite.cacheAsBitmap = true;
Sedan du angett egenskapen
cacheAsBitmap
till
true
kanske du noterar att visningsobjektsinstansen automatiskt pixelfästs till hela koordinater. När du testar SWF-filen upptäcker du att alla animeringar som utförs med komplexa vektorbilder återges mycket snabbare.
En yta (cachelagrad bitmapp) skapas inte även om
cacheAsBitmap
har satts till
true
när ett eller flera av följande alternativ inträffar:
Omformningsmatriser för cachelagrade bitmappar
I AIR-program för mobilenheter bör du ange egenskapen
cacheAsBitmapMatrix
när du anger egenskapen
cacheAsBitmap
. Genom att ange den här egenskapen kan du använda ett större antal omformningar på visningsobjektet utan att utlösa någon omgenerering.
mySprite.cacheAsBitmap = true;
mySprite.cacheAsBitmapMatrix = new Matrix();
När du anger den här matrix-egenskapen kan du använda följande extra omformningar på visningsobjektet utan att cacha om objektet:
De här omformningarna används direkt på den cachelagrade bitmappen.
|
|
|