Zapisywanie obiektów wyświetlanych w pamięci podręcznejFlash Player 9 i nowsze wersje, Adobe AIR 1.0 i nowsze wersje Ze zwiększaniem wielkości elementów w programie Flash — niezależnie od tego, czy tworzona jest aplikacja lub złożone animacje skryptowe — wiąże się konieczność pamiętania o wydajności i optymalizacji. Jeśli istnieje treść, która pozostaje statyczna (np. instancja Shape prostokąta), program Flash Player i środowisko AIR nie optymalizuje tej treści. Dlatego po zmianie położenia prostokąta program Flash Player lub środowisko AIR ponownie rysuje całą instancję Shape. Istnieje możliwość zapisywania w pamięci podręcznej określonych obiektów wyświetlanych w celu zwiększenia wydajności pliku SWF. Obiekt wyświetlany jest powierzchnią — bitmapą danych wektorowych instancji. Tych danych nie należy zanadto zmieniać w całym cyklu życia pliku SWF. Dlatego instancje, dla których włączono zapisywanie w pamięci podręcznej, nie są w rzeczywistości ponownie rysowane podczas odtwarzania pliku SWF, dzięki czemu renderowanie pliku SWF jest szybsze. Uwaga: Użytkownik może zaktualizować dane wektorowe, co powoduje odtworzenie powierzchni. Dlatego dane wektorowe zapisane w pamięci podręcznej powierzchni nie muszą pozostawać takie same w całym pliku SWF.
Ustawienie wartości true dla właściwości cacheAsBitmap obiektu wyświetlanego powoduje, że obiekt wyświetlany zapisany w pamięci podręcznej staje się bitmapową reprezentacją samego siebie. Program Flash Player lub środowisko AIR tworzy obiekt powierzchni dla instancji i jest to bitmapa zapisana w pamięci podręcznej, a nie dane wektorowe. Zmiana krawędzi obiektu wyświetlanego powoduje, że powierzchnia zostanie odtworzona, a jej wielkość nie zostaje zmieniona. Powierzchnie mogą być zagnieżdżane w innych powierzchniach. Powierzchnia podrzędna kopiuje swoją bitmapę do własnej powierzchni nadrzędnej. Więcej informacji zawiera sekcja Włączanie zapisywania w pamięci podręcznej dla bitmap. Właściwości opaqueBackground i scrollRect klasy DisplayObject są powiązane z zapisywaniem bitmapy w pamięci podręcznej z wykorzystaniem właściwości cacheAsBitmap. Te trzy właściwości są niezależne od sobie, ale właściwości opaqueBackground i scrollRect działają najlepiej po zapisaniu obiektu w pamięci podręcznej w postaci bitmapy — zalety korzystania z właściwości opaqueBackground i scrollRect są widoczne tylko po ustawieniu dla właściwości cacheAsBitmap wartości true. Więcej informacji o przewijaniu treści obiektu wyświetlanego zawiera sekcja Panoramowanie i przewijanie obiektów wyświetlanych. Więcej informacji o ustawianiu nieprzezroczystego tła zawiera sekcja Ustawianie nieprzezroczystego koloru tła. Informacje na temat maskowania kanałów alfa, co wymaga ustawienia wartości true dla właściwości cacheAsBitmap zawiera sekcja Maskowanie obiektów wyświetlanych. Warunki, w jakich należy włączyć zapisywanie w pamięci podręcznejWłączenie zapisywania w pamięci podręcznej dla obiektu wyświetlanego powoduje utworzenie powierzchni, co wiąże się z pewnymi korzyściami, takimi jak szybsze renderowanie złożonych animacji wektorowych. Istnieje kilka scenariuszy, w których włączenie zapisywania w pamięci jest pożądane. Może się wydawać, że włączenie zapisywania w pamięci podręcznej jest zawsze konieczne w celu zwiększenia wydajności plików SWF; jednak istnieją sytuacje, w których zapisywanie w pamięci podręcznej nie zwiększa wydajności, a nawet może ją pogarszać. W niniejszej sekcji przedstawiono scenariusze, w których zapisywanie w pamięci podręcznej powinno być stosowane. Przedstawiono również scenariusze, w których należy korzystać z normalnych obiektów wyświetlanych. Całkowita wydajność danych zapisanych w pamięci podręcznej zależy od takich czynników jak złożoność danych wektorowych obiektów, intensywność zmian danych oraz ustawienie właściwości opaqueBackground. Jeśli zmiany dotyczą niewielkich obszarów, różnica między stosowaniem powierzchni i wykorzystywaniem danych wektorowych jest minimalna. Przed wdrożeniem aplikacji zalecane jest przetestowanie obydwu scenariuszy. Warunki, w jakich należy korzystać z zapisywania w pamięci podręcznejPoniżej wymieniono typowe scenariusze, w których zapisywanie bitmap w pamięci podręcznej może przynieść zauważalne korzyści.
Włączenie zapisywania bitmapy w pamięci podręcznej w każdym z tych scenariuszy zwiększa szybkość odpowiedzi i powiększa interaktywność aplikacji poprzez optymalizację grafiki wektorowej. Ponadto zastosowanie filtru do obiektu wyświetlanego powoduje, że dla właściwości cacheAsBitmap automatycznie zostaje ustawiona wartość true, nawet jeśli użytkownik jawnie ustawi wartość false. Gdy wszystkie filtry obiektu wyświetlanego zostaną wyczyszczone, właściwość cacheAsBitmap uzyskuje wartość, którą ustawiono dla niej ostatnim razem. Kiedy należy unikać buforowania bitmap?Użycie tej funkcji w niewłaściwych okolicznościach może obniżyć wydajność pliku SWF. Jeśli stosowane jest zapisywanie bitmapy w pamięci podręcznej, należy pamiętać o poniższych wskazówkach:
Włączanie zapisywania w pamięci podręcznej dla bitmapAby umożliwić zapisanie bitmapy w pamięci podręcznej w przypadku obiektu wyświetlanego, należy ustawić dla właściwości cacheAsBitmap wartość true: mySprite.cacheAsBitmap = true; Po ustawieniu dla właściwości cacheAsBitmap wartości true może się zdarzyć, że obiekt wyświetlany zostanie przyciągnięty (piksele) do współrzędnych całkowitych. Podczas testowania pliku SWF użytkownik zauważy, że animacja wykonywana w przypadku skomplikowanego obrazu wektorowego będzie renderowana szybciej. Jeśli spełniony jest jeden z poniższych warunków, powierzchnia (bitmapa zapisana w pamięci podręcznej) nie zostanie utworzona, nawet jeśli dla właściwości cacheAsBitmap zostanie ustawiona wartość true:
Macierze przekształceń buforowanych bitmapW aplikacjach AIR dla urządzeń przenośnych za każdym razem, gdy jest ustawiana właściwość cacheAsBitmap, należy ustawić właściwość cacheAsBitmapMatrix. Ustawienie tej właściwości umożliwia zastosowanie większej liczby przekształceń względem obiektu ekranowego bez wyzwolenia renderowania. mySprite.cacheAsBitmap = true; mySprite.cacheAsBitmapMatrix = new Matrix(); Podczas ustawiania tej właściwości macierzy można zastosować następujące dodatkowe przekształcenie obiektu ekranowego bez ponownego buforowania tego obiektu:
Te przekształcenia są stosowane bezpośrednio do buforowanej bitmapy. |
|