W języku ActionScript 3.0 istnieją osobne klasy dla różnych typów obiektów wyświetlanych. W językach ActionScript 1.0 i 2.0 wiele takich samych typów obiektów znajduje się w jednej klasie — klasie MovieClip.
Indywidualizacja klas i hierarchiczna struktura list wyświetlania wiążą się z następującymi korzyściami:
-
Bardziej wydajne renderowanie i zmniejszone wykorzystanie pamięci
-
Udoskonalona obsługa głębi
-
Pełne przejście przez listę wyświetlania
-
Obiekty ekranowe spoza listy
-
Łatwiejsze przydzielanie obiektów ekranowych do podklas
Bardziej wydajne renderowanie i mniejsze rozmiary plików
W językach ActionScript 1.0 i 2.0 kształty można było rysować tylko w obiekcie MovieClip. W języku ActionScript 3.0 istnieją prostsze klasy obiektów wyświetlanych, w których można rysować kształty. Te klasy obiektów wyświetlanych języka ActionScript 3.0 nie zawierają pełnego zestawu metod i właściwości, które zawiera obiekt MovieClip, dlatego w mniejszym stopniu obciążają pamięć i zasoby procesora.
Na przykład: każdy obiekt MovieClip zawiera właściwości dla osi czasu klipu filmowego, a obiekt Shape nie zawiera. Właściwości przeznaczone do zarządzania osią czasu mogą zużywać znaczne ilości pamięci i zasobów procesora. W języku ActionScript 3.0 korzystanie z obiektu Shape zapewnia wyższą wydajność. Obiekt Shape wymaga mniejszego nakładu pracy niż bardziej złożony obiekt MovieClip. W programach Flash Player i AIR nie ma potrzeby zarządzania nieużywanymi właściwościami MovieClip, co zwiększa szybkość przetwarzania i zmniejsza ilość pamięci, z której korzysta obiekt.
Udoskonalona obsługa głębi
W języku ActionScript 1.0 i 2.0 zarządzanie głębią odbywało się na podstawie liniowego schematu zarządzania oraz metod, takich jak
getNextHighestDepth()
.
Język ActionScript 3.0 zawiera klasę DisplayObjectContainer, w której dostępne są wygodniejsze metody i właściwości przeznaczone do zarządzania głębią obiektów wyświetlanych.
W języku ActionScript 3.0 przesunięcie obiektu wyświetlanego do nowej pozycji na liście elementów podrzędnych instancji DisplayObjectContainer powoduje automatyczną zmianę pozycji innych elementów podrzędnych w kontenerze obiektów wyświetlanych i przypisanie tym elementom odpowiednich indeksów (elementów podrzędnych) w tym kontenerze.
Ponadto w języku ActionScript 3.0 zawsze możliwe jest wykrywanie wszystkich obiektów podrzędnych dowolnego kontenera obiektów wyświetlanych. Każda instancja DisplayObjectContainer zawiera właściwość
numChildren
, która określa liczbę elementów podrzędnych w kontenerze obiektów wyświetlanych. Lista podrzędna kontenera obiektów wyświetlanych jest zawsze indeksowana, dlatego możliwe jest sprawdzanie każdego obiektu na liście od indeksu 0 aż do ostatniej pozycji indeksu (
numChildren - 1
). Nie było to możliwe w przypadku metod i właściwości obiektu MovieClip w językach ActionScript 1.0 i 2.0.
W języku ActionScript 3.0 możliwe jest łatwe przechodzenie przez kolejne pozycje na liście wyświetlania; między numerami indeksu listy podrzędnej kontenera obiektów wyświetlania nie ma przerw. Przechodzenie przez listę wyświetlania i zarządzanie głębią obiektów jest znacznie łatwiejsze niż w językach ActionScript 1.0 i 2.0. W językach ActionScript 1.0 i 2.0 klip filmowy mógł zawierać obiekty z przerwami w kolejności głębokości, co utrudniało przechodzenie listy obiektu. W języku ActionScript 3.0 każda lista podrzędna kontenera obiektów wyświetlanych jest zapisana w wewnętrznej pamięci podręcznej jako tablica, co sprawia, że wyszukiwania (wg indeksu) przebiegają bardzo szybko. Bardzo szybko przebiega również pętla przez wszystkie elementy podrzędne w kontenerze obiektów wyświetlanych.
W języku ActionScript 3.0 możliwe jest również uzyskanie dostępu do elementów podrzędnych w kontenerze obiektu wyświetlania za pomocą metody
getChildByName()
klasy DisplayObjectContainer.
Pełne przejście przez listy wyświetlania
W językach ActionScript 1.0 i 2.0 nie było możliwe uzyskanie dostępu do niektórych obiektów, np. kształtów wektorowych, które zostały narysowane w narzędziu do tworzenia treści programu Flash. W języku ActionScript 3.0 można uzyskać dostęp do wszystkich obiektów z listy wyświetlania — do utworzonych w języku ActionScript oraz wszystkich obiektów wyświetlanych utworzonych w narzędziu do tworzenia treści programu Flash. Szczegółowe informacje zawiera rozdział
Przechodzenie przez listę wyświetlania
.
Obiekty wyświetlane spoza listy
W języku ActionScript 3.0 możliwe jest tworzenie obiektów wyświetlanych, które nie są widoczne na liście wyświetlania. Są one określane jako obiekty wyświetlane
spoza listy
. Obiekt wyświetlany jest dodawany do widocznej listy wyświetlania tylko po wywołaniu metody
addChild()
lub
addChildAt()
instancji DisplayObjectContainer, która została już dodana do listy wyświetlania.
Obiekty wyświetlane spoza listy mogą służyć do tworzenia skomplikowanych obiektów wyświetlania, np. takich, które zawierają wiele kontenerów obiektów wyświetlanych zawierających wiele obiektów. Utrzymując obiekty wyświetlane poza listą można tworzyć skomplikowane obiekty bez konieczności przetwarzania w celu renderowania tych obiektów wyświetlania. Obiekty wyświetlany spoza listy można w dowolnym momencie dodać do listy wyświetlania. Ponadto możliwe jest przesuwanie elementów podrzędnego kontenera obiektów wyświetlanych na listę i z listy oraz do dowolnej pozycji na liście wyświetlania.
Łatwiejsze przydzielanie obiektów wyświetlanych do podklas
W językach ActionScript 1.0 i 2.0 często konieczne było dodawanie nowych obiektów MovieClip, takich jak plik SWF, w celu tworzenia prostych kształtów lub do wyświetlanych bitmap. W języku ActionScript 3.0 klasa DisplayObject zawiera szereg podklas, takich jak Shape i Bitmap. Klasy w ActionScript 3.0 są bardziej wyspecjalizowane dla pewnych typów obiektów, dlatego łatwiej jest tworzyć proste podklasy wbudowanych klas.
Na przykład: w celu narysowania okręgu w języku ActionScript 2.0 należy utworzyć klasę CustomCircle, która rozszerzy klasę MovieClip po utworzeniu instancji obiektu klasy niestandardowej. Jednak ta klasa zawierała by również pewną liczbę właściwości i metod z klasy MovieClip (np.
totalFrames
), które nie mają zastosowania do tej klasy. W języku ActionScript 3.0 można utworzyć klasę CustomCircle, która będzie stanowiła rozszerzenie obiektu Shape i nie będzie zawierała niezwiązanych właściwości i metod, które znajdują się w klasie MovieClip. Poniższy kod przedstawia przykład klasy CustomCircle:
import flash.display.*;
public class CustomCircle extends Shape
{
var xPos:Number;
var yPos:Number;
var radius:Number;
var color:uint;
public function CustomCircle(xInput:Number,
yInput:Number,
rInput:Number,
colorInput:uint)
{
xPos = xInput;
yPos = yInput;
radius = rInput;
color = colorInput;
this.graphics.beginFill(color);
this.graphics.drawCircle(xPos, yPos, radius);
}
}
|
|
|