Zwischenspeichern von Anzeigeobjekten

Flash Player 9 und höher, Adobe AIR 1.0 und höher

Wenn Ihre Entwürfe in Flash umfangreicher werden, z. B. wenn Sie eine Anwendung oder komplexe Animationsskripts entwickeln, müssen Sie Leistung und Optimierung berücksichtigen. Bei statischen Inhalten (wie rechteckigen Shape-Instanzen) nehmen Flash Player und AIR keine Optimierung des Inhalts vor. Wenn Sie die Position des Rechtecks ändern, würde die gesamte Shape-Instanz in Flash Player oder AIR neu gezeichnet werden.

Sie können bestimmte Anzeigeobjekte zwischenspeichern, um die Leistung Ihrer SWF-Datei zu verbessern. Das Anzeigeobjekt kann mit einer Oberfläche verglichen werden, die im Prinzip eine Bitmap-Version der Vektordaten der Instanz darstellt. Hierbei handelt es sich um die Daten in der SWF-Datei, die sich voraussichtlich nur wenig ändern werden. Deshalb werden Instanzen, für die das Zwischenspeichern aktiviert ist, beim Abspielen der SWF-Datei nicht kontinuierlich neu gezeichnet, sodass die SWF-Datei schneller gerendert werden kann.

Hinweis: Sie können die Vektordaten aktualisieren, wodurch die Oberfläche neu erstellt wird. Deshalb müssen die in der Oberfläche zwischengespeicherten Vektordaten nicht in der gesamten SWF-Datei unverändert bleiben.

Durch das Einstellen der cacheAsBitmap -Eigenschaft eines Anzeigeobjekts auf true legt der Cache-Speicher des Anzeigeobjekts eine Bitmap-Darstellung von sich selbst an. Flash Player oder AIR erstellt ein Oberflächenobjekt der Instanz, bei dem es sich um eine zwischengespeicherte Bitmap anstelle von Vektordaten handelt. Wenn Sie die Abmessungen des Anzeigeobjekts ändern, wird die Oberfläche nicht vergrößert oder verkleinert, sondern neu erstellt. Oberflächen können innerhalb von anderen Oberflächen verschachtelt sein. Die untergeordnete Oberfläche kopiert die Bitmap auf die übergeordnete Oberfläche. Weitere Informationen finden Sie unter Aktivieren der Bitmap-Zwischenspeicherung .

Die Eigenschaften opaqueBackground und scrollRect der DisplayObject-Klasse sind mit der Bitmap-Zwischenspeicherung mit der cacheAsBitmap -Eigenschaft verwandt. Obwohl diese drei Eigenschaften unabhängig voneinander sind, arbeiten die Eigenschaften opaqueBackground und scrollRect am besten, wenn ein Objekt als eine Bitmap zwischengespeichert ist – Sie sehen die Leistungsvorteile für die Eigenschaften opaqueBackground und scrollRect nur dann, wenn Sie cacheAsBitmap auf true einstellen. Weitere Informationen zum Scrollen des Inhalts von Anzeigeobjekten finden Sie unter Schwenken und Scrollen von Anzeigeobjekten . Weitere Informationen zum Festlegen eines undurchsichtigen Hintergrunds finden Sie unter Festlegen eines undurchsichtigen Hintergrunds .

Weitere Informationen zur Maskierung des Alphakanals, für die Sie die Eigenschaft cacheAsBitmap auf true einstellen müssen, finden Sie unter Maskieren von Anzeigeobjekten .

Geeignete Szenarien für das Zwischenspeichern

Wenn Sie das Zwischenspeichern für ein Anzeigeobjekt aktivieren, wird eine Oberfläche erstellt. Dies bietet unter anderem den Vorteil, dass komplexe Vektoranimationen schneller gerendert werden. Das Zwischenspeichern ist in mehreren Szenarien eine gute Lösung, führt jedoch nicht immer zu einer Leistungssteigerung der SWF-Dateien, sondern kann in manchen Fällen die Leistung sogar beeinträchtigen. In diesem Abschnitt wird beschrieben, in welchen Szenarien das Zwischenspeichern zu empfehlen ist und wann Sie reguläre Anzeigeobjekte verwenden sollten.

Die Gesamtleistung der zwischengespeicherten Daten richtet sich nach den folgenden Faktoren: Komplexität der Vektordaten in den Instanzen, Menge der zu ändernden Daten und Einstellung der Eigenschaft opaqueBackground . Wenn Sie nur kleine Bereiche ändern, ist der Unterschied bei Verwendung einer Oberfläche im Vergleich mit Vektordaten möglicherweise kaum wahrnehmbar. Es empfiehlt sich, beide Szenarien zu testen, bevor Sie die Anwendung bereitstellen.

Szenarien für die Bitmap-Zwischenspeicherung

Im Folgenden werden einige typische Szenarien aufgelistet, bei denen die Bitmap-Zwischenspeicherung deutliche Vorteile bieten kann.

  • Komplexe Hintergrundbilder: Eine Anwendung, die ein detailliertes und komplexes Hintergrundbild von Vektordaten enthält (beispielsweise ein Bild, auf das Sie den Befehl „Bitmap nachzeichnen“ angewendet haben, oder eine Grafik, die Sie in Adobe Illustrator® erstellt haben). Sie können Zeichen über dem Hintergrund animieren; dies verlangsamt die Animation, da der Hintergrund die Vektordaten laufend neu erstellen muss. Zur Leistungssteigerung können Sie die Eigenschaft opaqueBackground des Hintergrund-Anzeigeobjekts auf true einstellen. Der Hintergrund wird als Bitmap dargestellt und kann schnell neu gezeichnet werden, sodass die Animation schneller abgespielt wird.

  • Scrollbares Textfeld: Eine Anwendung, die viel Text in einem scrollbaren Textfeld anzeigt. Sie können das Textfeld in einem Anzeigeobjekt platzieren, das Sie als scrollbar mit scrollbaren Begrenzungen festlegen (die Eigenschaft scrollRect). Dies aktiviert schnelles Pixelscrolling für diese Instanz. Wenn ein Benutzer die Anzeigeobjekt-Instanz scrollt, verlagert Flash Player oder AIR die gescrollten Pixel nach oben und erstellt den neuen, freien Bereich anstelle des gesamten Textfelds.

  • Windowing-System: Eine Anwendung mit komplexen, überlappenden Fenstern. Jedes Fenster kann geöffnet oder geschlossen werden (z. B. Webbrowserfenster). Wenn Sie jedes Fenster als Oberfläche markieren (durch Einstellen der Eigenschaft cacheAsBitmap auf true ), wird jedes Fenster isoliert und zwischengespeichert. Benutzer können die Fenster ziehen, sodass sie überlappen, und kein Fenster muss den Vektorinhalt neu erstellen.

  • Maskierung des Alphakanals: Wenn Sie die Maskierung des Alphakanals verwenden, müssen Sie die Eigenschaft cacheAsBitmap auf true setzen. Weitere Informationen finden Sie unter Maskieren von Anzeigeobjekten .

Das Aktivieren der Bitmap-Zwischenspeicherung für alle diese Szenarien verbessert die Reaktion und Interaktivität der Anwendung, da die Vektorgrafiken optimiert werden.

Wenn Sie darüber hinaus einen Filter auf das Anzeigeobjekt anwenden, wird die Eigenschaft cacheAsBitmap automatisch auf true eingestellt, auch wenn Sie explizit den Wert false vorgeben. Wenn Sie sämtliche Filter eines Anzeigeobjekts löschen, wird die Eigenschaft cacheAsBitmap auf den Wert zurückgesetzt, der zuletzt eingestellt war.

Nicht geeignete Szenarien für die Bitmap-Zwischenspeicherung

Wenn Sie dieses Funktionsmerkmal in den falschen Situationen verwenden, kann dies die Leistung der SWF-Datei beeinträchtigen. Beachten Sie bei der Verwendung der Bitmap-Zwischenspeicherung folgende Richtlinien:

  • Verwenden Sie nicht zu viele Oberflächen (Anzeigeobjekte, für die das Zwischenspeichern aktiviert ist). Da jede Oberfläche mehr Arbeitsspeicher belegt als ein reguläres Anzeigeobjekt, sollten Sie Oberflächen nur aktivieren, wenn Sie die Leistung beim Rendern steigern müssen.

    Eine zwischengespeicherte Bitmap kann wesentlich mehr Speicher als ein reguläres Anzeigeobjekt belegen. Angenommen, eine Sprite-Instanz auf der Bühne hat eine Größe von 250 x 250 Pixel, so belegt die zwischengespeicherte Sprite-Instanz 250 KB und die reguläre Sprite-Instanz 1 KB.

  • Vermeiden Sie das Vergrößern von zwischengespeicherten Oberflächen. Wenn Sie die Bitmap-Zwischenspeicherung zu häufig einsetzen, wird viel Speicher verbraucht (siehe vorherigen Punkt), besonders wenn Sie den Inhalt vergrößern.

  • Verwenden Sie Oberflächen für Anzeigeobjekt-Instanzen, die im Wesentlichen statisch sind (also keine Animationen enthalten). Sie können die Instanz ziehen oder verschieben, doch der Inhalt der Instanz sollte nicht animiert sein und keine großen Änderungen aufweisen. (Animationen oder sich ändernde Inhalte sind eher bei einer MovieClip-Instanz mit einer Animation oder einer Video-Instanz zu finden.) Wenn Sie beispielsweise eine Instanz drehen oder transformieren, wechselt die Instanz zwischen der Oberfläche und Vektordaten. Dies ist schwer zu verarbeiten und wirkt sich negativ auf die SWF-Datei aus.

  • Bei einer Kombination aus Oberflächen und Vektordaten ist der Verarbeitungsaufwand für Flash Player und AIR (und manchmal auch für den Computer) höher. Gruppieren Sie Oberflächen so oft wie möglich – z. B. beim Erstellen von Windowing-Anwendungen.

  • Sie sollten keine Objekte zwischenspeichern, deren Grafiken sich häufig ändern. Der Bitmap-Zwischenspeicher wird bei den folgenden Aktionen immer neu gezeichnet: Skalieren, Neigen oder Drehen des Anzeigeobjekts, Ändern der Alpha- oder Farbtransformation, Verschieben von untergeordneten Anzeigeobjekten oder Zeichnen mit der graphics-Eigenschaft. Wenn dies bei jedem Bild der Fall ist, muss die Laufzeit das Objekt in eine Bitmap zeichnen und dann diese Bitmap auf die Bühne kopieren. Dies bedeutet mehr Arbeit, als wenn das nicht zwischengespeicherte Objekt einfach auf der Bühne gezeichnet wird. Ein angemessenes Leistungsverhältnis zwischen der Zwischenspeicherung und der Aktualisierungshäufigkeit richtet sich nach der Komplexität und Größe des Anzeigeobjekts. Letztendlich lässt sich dies nur durch Testen des jeweiligen Inhalts feststellen.

Aktivieren der Bitmap-Zwischenspeicherung

Zum Aktivieren der Bitmap-Zwischenspeicherung für ein Anzeigeobjekt stellen Sie die Eigenschaft cacheAsBitmap auf true ein:

mySprite.cacheAsBitmap = true;

Nachdem Sie die Eigenschaft cacheAsBitmap auf true eingestellt haben, werden Sie eventuell feststellen, dass die Pixel im Anzeigeobjekt automatisch an ganzen Koordinaten ausgerichtet werden. Beim Testen der SWF-Datei werden Sie wahrscheinlich sehen, dass komplexe Vektoranimationen im Vergleich zu normalen Animationen wesentlich schneller gerendert werden.

In den folgenden Fällen wird keine Oberfläche (zwischengespeicherte Bitmap) erstellt, auch dann nicht, wenn cacheAsBitmap auf true eingestellt ist:

  • Höhe oder Breite der Bitmap betragen mehr als 2880 Pixel.

  • Der Bitmap kann (aufgrund von zu wenig Systemspeicher) nicht genügend Speicher zugewiesen werden.

Transformationsmatrizen für zwischengespeicherte Bitmaps

In AIR-Anwendungen für Mobilgeräte sollten Sie die cacheAsBitmapMatrix -Eigenschaft immer dann festlegen, wenn Sie auch die cacheAsBitmap -Eigenschaft setzen. Durch Festlegen dieser Eigenschaft können Sie mehr Transformationen auf das Anzeigeobjekt anwenden, ohne dass ein erneutes Rendern ausgelöst wird.

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

Wenn Sie diese Matrixeigenschaft festlegen, können Sie die folgenden zusätzlichen Transformationen auf das Anzeigeobjekt anwenden, ohne dass das Objekt erneut zwischengespeichert wird:

  • Verschieben oder Versetzen ohne Pixelausrichtung

  • Drehen

  • Skalieren

  • Neigen

  • Ändern des Alphawertes (zwischen 0 und 100 % Transparenz)

Diese Transformationen werden direkt auf die zwischengespeicherte Bitmap angewendet.