Weergaveobjecten in cache plaatsen

Flash Player 9 of hoger, Adobe AIR 1.0 of hoger

Naarmate uw ontwerpen in Flash groter worden, moet u nadenken over prestaties en optimalisatie, of u nu een toepassing of complexe gescripte animaties maakt. Wanneer u inhoud hebt die statisch blijft (zoals een rechthoekige Shape-instantie), optimaliseren Flash Player en AIR de inhoud niet. Wanneer u de positie van de rechthoek wijzigt, wordt de gehele Shape-instantie opnieuw in Flash Player of AIR getekend.

U kunt opgegeven objecten in cache plaatsen om de prestaties van het SWF-bestand te verbeteren. Het weergaveobject is een oppervlak , in feite een bitmapversie van de vectorgegevens van de instantie. U zult deze gegevens tijdens het verloop van het SWF-bestand waarschijnlijk niet veel willen wijzigen. Instanties waarvoor plaatsing in cache is ingeschakeld, worden dus niet continu opnieuw getekend tijdens het afspelen van het SWF-bestand, waardoor het SWF-bestand sneller kan worden gerenderd.

Opmerking: U kunt de vectorgegevens bijwerken, waarbij het oppervlak opnieuw wordt gemaakt. De vectorgegevens die in cache zijn geplaatst, hoeven hierdoor niet voor het hele SWF-bestand gelijk te blijven.

Als u de eigenschap cacheAsBitmap van een weergaveobject op true instelt, zorgt u ervoor dat het weergaveobject een bitmaprepresentatie van zichzelf in cache plaatst. Flash Player of AIR maakt een oppervlakobject voor de instantie. Dit is een in cache geplaatste bitmap in plaats van vectorgegevens. Wanneer u de grenzen van het weergaveobject wijzigt, wordt het oppervlak opnieuw gemaakt (en niet alleen maar gewijzigd). Oppervlakken kunnen binnen andere oppervlakken worden genest. De bitmap van het onderliggende oppervlak wordt naar het bovenliggende oppervlak gekopieerd. Zie Bitmap in cache plaatsen voor meer informatie.

De eigenschappen opaqueBackground en scrollRect van de klasse DisplayObject zijn gerelateerd aan de eigenschap cacheAsBitmap , waarbij een bitmap in cache wordt geplaatst. Hoewel deze drie eigenschappen onafhankelijk van elkaar zijn, werken de eigenschappen opaqueBackground en scrollRect het best wanneer een object als bitmap in cache wordt geplaatst. De prestaties van de eigenschappen opaqueBackground en scrollRect verbeteren alleen wanneer u cacheAsBitmap instelt op true . Zie Weergaveobjecten pannen en schuiven voor meer informatie over het schuiven van inhoud van weergaveobjecten. Zie Een dekkende achtergrondkleur instellen voor meer informatie over het instellen van een dekkende achtergrond.

Zie Weergaveobjecten maskeren voor meer informatie over alfkanaalmaskering, waarvoor u de eigenschap cacheAsBitmap op Weergaveobjecten maskeren moet instellen.

Wanneer moet u plaatsing in cache inschakelen?

Wanneer plaatsing in cache is ingeschakeld voor een weergaveobject, wordt een oppervlak gemaakt. Dit biedt een aantal voordelen: zo worden complexe vectoranimaties bijvoorbeeld snel gerenderd. Er zijn diverse scenario's denkbaar waarin het inschakelen van plaatsing in cache nuttig is. Misschien bent u geneigd plaatsing in cache altijd in te schakelen om de prestaties van SWF-bestanden te verbeteren. In sommige situaties worden de prestaties echter niet verbeterd bij plaatsing in cache, de prestaties kunnen zelfs verslechteren. In deze sectie worden scenario's beschreven waarbij plaatsing in cache moet worden gebruikt en er wordt beschreven wanneer u beter standaardweergaveobjecten kunt gebruiken.

De totale prestaties van gegevens die in cache zijn geplaatst, zijn afhankelijk van de complexiteit van de vectorgegevens van uw instanties, van de hoeveelheid gegevens die u wijzigt en van de instelling van de eigenschap opaqueBackground . Wanneer u kleine gebieden wijzigt, kan het verschil tussen het gebruik van een oppervlak en vectorgegevens verwaarloosbaar klein zijn. Het kan zinvol zijn beide scenario's voor uw werk uit te proberen voordat u de toepassing implementeert.

Wanneer moet u bitmaps in cache plaatsen?

Hier volgen typische scenario's waarin plaatsing van bitmap in cache aanzienlijke voordelen kan opleveren.

  • Complexe achtergrondafbeelding: een toepassing die een gedetailleerde en complexe achtergrondafbeelding van vectorgegevens bevat (bijvoorbeeld een afbeelding waarin u de opdracht Bitmap overtrekken hebt gebruikt of illustraties die u hebt gemaakt in Adobe Illustrator®). U kunt tekens laten bewegen tegen een achtergrond, waardoor de animatie wordt vertraagd, omdat de achtergrond de vectorgegevens continu opnieuw moet genereren. Als u de prestaties wilt verbeteren, kunt u de eigenschap opaqueBackground van het weergaveobject op de achtergrond instellen op true . De achtergrond wordt gerenderd als een bitmap en kan snel opnieuw worden getekend, waardoor de animatie veel sneller wordt afgespeeld.

  • Schuivend tekstveld: een toepassing waarin een grote hoeveelheid tekst in een schuivend tekstveld wordt weergegeven. U kunt het tekstveld in een weergaveobject plaatsen die u instelt als schuifbaar met verschuivende grenzen (de eigenschap scrollRect ). Hiermee wordt snelle pixelverschuiving ingeschakeld voor de opgegeven instantie. Wanneer een gebruiker de weergaveobjectinstantie schuift, worden de verschoven pixels omhoog verplaatst en wordt het nieuwe weergegeven gebied gegenereerd zonder het hele tekstveld opnieuw te genereren.

  • Venstersysteem: een toepassing met een complex systeem van overlappende vensters. Elk venster (zoals vensters van een webbrowser) kan zijn geopend of gesloten. Wanneer u elk venster als een oppervlak markeert (door de eigenschap cacheAsBitmap op true in te stellen), wordt elk venster van de rest gescheiden en in cache geplaatst. Gebruikers kunnen de vensters slepen, zodat deze elkaar overlappen. Op die manier hoeft de vectorinhoud niet voor elk venster opnieuw te worden gegenereerd.

  • Alpha-kanaalmaskering: wanneer u met alpha-kanaalmaskering werkt, moet u de eigenschap cacheAsBitmap instellen op true . Zie Weergaveobjecten maskeren voor meer informatie.

Als u in al deze scenario's de bitmap in cache plaatst, wordt de reactiesnelheid en de interactiviteit van de toepassing verbeterd dankzij optimalisatie van de vectorafbeeldingen.

Als u bovendien een filter toepast op een weergaveobject, wordt cacheAsBitmap automatisch op true ingesteld, zelfs als u deze eigenschap handmatig op false hebt ingesteld. Wanneer u alle filters voor een weergaveobject wist, wordt de eigenschap cacheAsBitmap gewijzigd in de laatst ingestelde waarde.

Wanneer moet u bitmapcaching vermijden?

Het gebruik van deze functie in de onjuiste situatie heeft ongewenste invloed op de prestaties van uw SWF-bestand. Gebruik de volgende richtlijnen wanneer u bitmaps in cache plaatst:

  • Maak geen overmatig gebruik van oppervlakken (weergaveobjecten waarvoor caching is ingeschakeld). Elk oppervlak gebruikt meer geheugen dan een standaardweergaveobject. U moet oppervlakken dan ook alleen inschakelen wanneer u renderingprestaties moet verbeteren.

    Een in cache geplaatste bitmap kan aanzienlijk meer geheugen gebruiken dan een standaardweergaveobject. Wanneer een instantie Sprite in het werkgebied 250 x 250 pixels groot is, kan de instantie bij plaatsing in cache bijvoorbeeld 250 kB in beslag nemen. Bij een standaardinstantie Sprite (niet in cache geplaatst) is dit 1 kB.

  • Vermijd in- en uitzoomen op oppervlakken die in cache zijn geplaatst. Wanneer u te veel gebruikmaakt van bitmapcaching, wordt zeer veel geheugen gebruikt (zie vorige punt), met name wanneer u inzoomt op de inhoud.

  • Gebruik oppervlakken voor weergaveobjectinstanties die overwegend statisch (zonder animatie) zijn. U kunt de instantie slepen of verplaatsen, maar de inhoud van de instantie mag niet bewegen of veel veranderen. (Animatie of bewegende inhoud wordt veelal gebruikt met een instantie MovieClip die animatie bevat of een instantie Video.) Wanneer u bijvoorbeeld een instantie roteert of transformeert, verandert de instantie tussen het oppervlak en de vectorgegevens. De verwerking hiervan is moeilijk en heeft een negatief effect op het SWF-bestand.

  • Wanneer u oppervlakken combineert met vectorgegevens, neemt de hoeveelheid verwerking voor Flash Player of AIR (en soms voor de computer) toe. Groepeer oppervlakken zoveel mogelijk, bijvoorbeeld wanneer u venstertoepassingen maakt.

  • Plaats geen objecten waarvan de afbeeldingen regelmatig veranderen in de cache. Steeds als u het weergaveobject schaalt, schuintrekt of roteert, de alfa- of kleurtransformatie wijzigt, onderliggende weergaveobjecten verplaatst of tekent met gebruik van de graphics-eigenschap, wordt de cachebitmap opnieuw getekend. Als dit in elk frame gebeurt, moet de runtime het object in een bitmap tekenen en deze bitmap vervolgens kopiëren naar het werkgebied. Dat is meer werk dan alleen het tekenen van het object buiten de cache naar het werkgebied. De nadelige invloed op de prestaties van opnemen in cache in vergelijking met de bijwerkfrequentie is afhankelijk van de complexiteit en grootte van het weergaveobject en kan alleen worden bepaald door het testen van de specifieke inhoud.

Bitmap in cache plaatsen

Als u een weergaveobject als bitmap in cache wilt plaatsen, stelt u de eigenschap cacheAsBitmap in op true :

mySprite.cacheAsBitmap = true;

Nadat u de eigenschap cacheAsBitmap hebt ingesteld op true , verspringt het weergaveobject automatisch naar hele pixelcoördinaten. Wanneer u het SWF-bestand test, worden de animaties die worden uitgevoerd op een complexe vectorafbeelding, merkbaar sneller gerenderd.

In de volgende situaties wordt een oppervlak (in cache geplaatste bitmap) niet gemaakt, zelfs niet wanneer cacheAsBitmap is ingesteld op true :

  • De bitmap is meer dan 2880 pixels hoog of breed.

  • De bitmap kan niet worden toegewezen (fout als gevolg van onvoldoende geheugen).

Transformatiematrices voor bitmaps in cache

In AIR-toepassingen voor mobiele apparatuur dient u de eigenschap cacheAsBitmapMatrix altijd in te stellen als u de eigenschap cacheAsBitmap instelt. Zo kunt u een groter scala aan transformaties toepassen op het weergaveobject zonder rendering te activeren.

mySprite.cacheAsBitmap = true; 
mySprite.cacheAsBitmapMatrix = new Matrix();

Wanneer u deze matrixeigenschap instelt, kunt u de volgende aanvullende transformaties toepassen op het weergaveobject zonder dat dit opnieuw in de cache wordt geplaatst:

  • Verplaatsen of vertalen zonder pixels uit te lijnen

  • Roteren

  • Schalen

  • Scheeftrekken

  • Alfa wijzigen (tussen 0 en 100% transparantie)

Deze transformaties worden rechtstreeks toegepast op de cachebitmap.