Vantagens da abordagem da lista de exibição

Flash Player 9 e posterior, Adobe AIR 1.0 e posterior

No ActionScript 3.0, existem classes separadas para diferentes tipos de objeto de exibição. No ActionScript 1.0 e 2.0, muitos objetos do mesmo tipo são incluídos em uma classe: a classe MovieClip.

Essa individualização de classes e a estrutura hierárquica das listas de exibição têm as seguintes vantagens:

  • Renderização mais eficiente e menos uso da memória

  • Melhor gerenciamento de profundidade

  • Profundidade completa da lista de exibição

  • Objetos de exibição fora da lista

  • Facilidade de subclassificação dos objetos de exibição

Renderização mais eficiente e arquivos menores

No ActionScript 1.0 e 2.0, você pode desenhar formas somente em um objeto MovieClip. No ActionScript 3.0, existem classes de objeto de exibição mais simples nas quais é possível desenhar formas. Como essas classes de objeto de exibição do ActionScript 3.0 não incluem um conjunto completo de métodos e propriedades como o objeto MovieClip, consomem menos recursos da memória e do processador.

Por exemplo, cada objeto MovieClip inclui propriedades para a linha do tempo do clipe de filme, enquanto o objeto Shape não faz isso. As propriedades de gerenciamento da linha do tempo podem usar muitos recursos da memória e do processador. No ActionScript 3.0, usar o objeto Shape melhora o desempenho. O objeto Shape tem uma sobrecarga menor do que o objeto MovieClip mais complexo. O Flash Player e o AIR não precisam gerenciar propriedades MovieClip não utilizadas, o que melhora a velocidade e reduz a memória usada pelo objeto.

Melhor gerenciamento de profundidade

No ActionScript 1.0 e 2.0, a profundidade era gerenciada por um esquema linear e métodos como getNextHighestDepth() .

O ActionScript 3.0 inclui a classe DisplayObjectContainer, que tem métodos e propriedades mais práticos para gerenciar a profundidade dos objetos de exibição.

No ActionScript 3.0, ao mover um objeto de exibição para uma nova posição da lista de filhos de uma ocorrência de DisplayObjectContainer, os outros filhos do contêiner de objeto de exibição são reposicionados automaticamente e designados nas posições de índice secundárias apropriadas no contêiner.

Além disso, no ActionScript 3.0, sempre é possível detectar todos os objetos filho de qualquer contêiner de objeto de exibição. Cada ocorrência de DisplayObjectContainer tem uma propriedade numChildren , que lista o número de filhos no contêiner de objeto de exibição. Como a lista de filhos de um contêiner de objeto de exibição sempre é uma lista indexada, você pode examinar todos os objetos da lista desde a posição 0 até a última posição de índice ( numChildren - 1 ). Isso não era possível com os métodos e as propriedades de um objeto MovieClip no ActionScript 1.0 e no 2.0.

No ActionScript 3.0, você pode percorrer com facilidade a lista de exibição na sequência; não existe nenhuma falha nos números de índice de uma lista de filhos de um contêiner de objeto de exibição. Percorrer a lista de exibição e gerenciar a profundidade dos objetos é muito mais fácil do que o que era permitido no ActionScript 1.0 e 2.0. No ActionScript 1.0 e 2.0, um clipe de filme podia ter objetos com lacunas intermitentes na ordem de profundidade, o que dificultava percorrer a lista de objetos. No ActionScript 3.0, cada lista de filhos de um contêiner de objeto de exibição é armazenada em cache internamente como uma matriz, resultando em consultas muito rápidas (por índice). Percorrer todos os filhos de um contêiner de objeto de exibição também é muito rápido.

No ActionScript 3.0, você também pode acessar os filhos de um contêiner de objeto de exibição usando o método getChildByName() da classe DisplayObjectContainer.

Profundidade completa da lista de exibição

No ActionScript 1.0 e 2.0, não era possível acessar alguns objetos, como formas vetoriais, que eram desenhados na ferramenta de criação do Flash. No ActionScript 3.0, você pode acessar todos os objetos da lista de exibição - os criados com o ActionScript e todos os objetos criados na ferramenta de criação do Flash. Para obter detalhes, consulte Como percorrer a lista de exibição .

Objetos de exibição fora da lista

No ActionScript 3.0, você pode criar objetos que não estão na lista de exibição visível. São os chamados objetos de exibição fora da lista . Um objeto de exibição é adicionado à lista visível somente quando você chama o método addChild() ou addChildAt() de uma ocorrência de DisplayObjectContainer que já foi adicionada à lista de exibição.

Você pode usar objetos de exibição fora da lista para montar objetos complexos, como os que têm vários contêineres com vários objetos de exibição. Mantendo os objetos de exibição fora da lista, você pode montar objetos complicados sem usar o tempo de processamento para renderizar esses objetos de exibição. Em seguida, você pode adicionar um objeto fora da lista à lista de exibição quando necessário. Além disso, é possível mover um filho de um contêiner de objeto de exibição na lista e fora dela e para qualquer posição desejada.

Facilidade de subclassificação dos objetos de exibição

No ActionScript 1.0 e 2.0, você tinha que adicionar com frequência novos objetos MovieClip a um arquivo SWF para criar formas básicas ou exibir bitmaps. No ActionScript 3.0, a classe DisplayObject inclui muitas subclasses internas, como Shape e Bitmap. Como as classes do ActionScript 3.0 são mais especializadas para tipos específicos de objetos, é mais fácil criar subclasses básicas das classes internas.

Por exemplo, para desenhar um círculo no ActionScript 2.0, era necessário criar uma classe CustomCircle que estende a classe MovieClip quando um objeto da classe personalizada é percorrido. No entanto, essa classe também incluía diversos métodos e propriedades da classe MovieClip (como totalFrames ) não apropriados. No ActionScript 3.0, entretanto, é possível criar uma classe CustomCircle que estende o objeto Shape e, desse modo, não inclui métodos e propriedades não relacionados que estão contidos na classe MovieClip. O código a seguir mostra um exemplo de uma classe 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); 
    } 
}