Cachelagra visningsobjekt

Flash Player 9 och senare, Adobe AIR 1.0 och senare

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:

  • Bitmappen är större än 2 880 pixlar i höjd eller bredd.

  • Bitmappen kan ej tilldelas (genererar ett fel om att minnet är slut).

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:

  • Flytta eller översätta utan pixelfästning

  • Rotera

  • Skala

  • Skeva

  • Ändra alfa (mellan 0 och 100 % genomskinlighet)

De här omformningarna används direkt på den cachelagrade bitmappen.