DISPLAY OBJECTS E AS3.: Display List Neste tutorial, veremos algumas das principais diferenças entre Actionscript 3.0 e Actionscript 2.0/1.0, que são o Display List, DisplayObjects e DisplayObjectContainers. Inicialmente veremos o Display List. O Display List gerencia todos os objetos que podem ser mostrados pelo Flash Player e consequentemente o caminho dos objetos incluídos nele. A seguir vermos um exemplo de como criávamos um novo objeto (neste caso, um MC) e incluíamos o mesmo no Stage com AS2.0/1.0 e então veremos como fazer com AS3.0. - Actionscript 1.0/2.0 // Timeline Principal: frame 1 - Actionscript 3.0 // Timeline Principal: frame 1 O que notamos inicialmente é que no AS 3.0 podemos agora criar um objeto usando a instrução (comumente chamada de statement) “new“. Isto inclui Botões e TextFields também. Outra coisa que observamos é que usávamos o getNextHighestDepht para trabalhar com as “profundidades” e que agora não o fazemos mais. Ao invés disso quando criamos um objeto no AS 3.0, este não é incluído no Stage! O Display List gerencia todos os objetos visíveis no Stage, qualquer coisa que não esteja separada no Display List é considerada invisível. Se quisermos incluir o objeto no Stage, devemos usar o método addChild em algum DisplayObjectContainer (a timeline principal ou “_root” é um DisplayObjectContainer como veremos adiante rapidamente). Notamos também que no AS 3.0, não demos um nome de instância ao nosso objeto MovieClip. Para fazer isso, precisamos usar a propriedade MovieClip.name e definir o nome. Veja o exemplo a seguir: meuMovieClip.name = “meu_mc”; .: DiplayObjects e DisplayObjectContainers A classe DisplayObject é a classe básica para todos os objetos que podem ser colocados no Display List. Há dois tipos: DisplayObject e DisplayObjectContainer. DisplayObjects são objetos que não podem ter children (como um objeto Shape ou TextField). Portanto, como deve ter presumido, o DisplayObjectContainer é um DisplayObject que pode ter children, podendo ser outros DisplayObjects ou outros DisplayObjectContainers. DisplayObjectsContainers são os que permitem que organizemos objetos no Stage. Vejamos um exemplo: // Timeline principal: frame 1 Criamos 3 objetos, um MovieClip e dois Sprites (sprites são uma novidade no AS 3.0, eles são basicamente MovieClips muito leves, sem timeline, perfeitos para serem usados como containers). A seguir usamos o método addChild para adicionarmos children a eles (container1 e container2). Incluímos meuMovieClip como um child para o container1, container1 como um child de container2 e finalmente, container2 como um child da Timeline Principal (ou _root). O Display List ficou assim: Display List A vantagem do Display List é sua versatilidade sobre o gerenciamento de profundidade, ou seja, nosso objeto MovieClip, sendo pai ou aninhado dentro de dois outros objetos (se contarmos o _root), nós podemos ainda facilmente mover nosso MovieClip de um pai para outro. Vejamos um exemplo de deslocamento de um objeto MovieClip para o _root: // Timeline principal: frame 1 Agora meuMovieClip é um child (filho) da timeline principal ou _root. Para fazer isso com AS 1.0/2.0 teríamos um grande trabalho e em muitos casos seria impossível. .: Trabalhando com Children Agora que sabemos como DisplayObjectContainers podem incluir children e como o Display List os gerencia, veremos como é simples gerenciar múltiplos children. Se considerarmos o DisplayObjectContainer como um array, podemos considerar algo parecido com isto: var parent:Array = new Array(child1, child2, child3, child4); O child4 está sobre o child3, que por sua vez está sobre o child2, que está sobre o child1. Quando usamos o método addChild() para incluir um child, ele é automaticamente incluído no final da lista (em nosso exemplo, seria um child5), similarmente como um método Array.push(). Podemos mover ou incluir um child em uma posição específica da lista de child através método addChildAt() que permite a inclusão e mudança de índice (posição) de um child dentro do parent. Vejamos um exemplo: // timeline principal: frame 1 portaRetrato.addChild(fig1); Como podemos perceber, é muito fácil incluir um objeto BitMap (figura3) na posição 2 (ou outra qualquer) como vimos no exemplo. Outra grande vantagem deste método é que através dele podemos posicionar figura3 na mesma posição que figura2, sem sobrescrever. Ao invés disso, figura2 é automaticamente movido um índice acima na lista. Em AS 1.0/2.0 seria mais complicado fazer a mesma coisa. .: Juntando tudo Agora que entendemos como funciona o Display List e o DisplayObject, vamos unir todos esses conceitos. No próximo exemplo, criaremos um conjunto de retângulos no Stage. Quando o usuário clica num deles, os índices dos retângulos child são configurados como última posição da lista (fazemos isso através da propriedade numChildren do DisplayObjectContainer) e é trazido para a frente de todos os retângulos. O usuário pode também pressionar, segurar e arrastar o retângulo pelo Stage. import flash.text.TextField; var retanguloContainer:Sprite = new Sprite(); var colunas:int = 5; var retanguloEspaco:int = 2; var retanguloAltura:uint = stage.stageWidth / linhas; var sombra:DropShadowFilter = new DropShadowFilter(); for(var j:int = 0; j < colunas; ++j){ retangulo.name = “caixa”+ ++retanguloIndice; retangulo.x = inicioX; retangulo.addEventListener(MouseEvent.MOUSE_OVER, retanguloOnMouseOver); inicioX += retangulo.width + retanguloEspaco; var retanguloNome:TextField = new TextField(); var retanguloNomeFormato:TextFormat = new TextFormat(“verdana”, 10, 0×666666, null, null, null, null, null, TextFormatAlign.CENTER); retangulo.addChild(retanguloNome); function retanguloOnMouseOut(evt:MouseEvent){ function retanguloOnMouseOver(evt:MouseEvent){ function retanguloOnPress(evt:MouseEvent){ function retanguloOnRelease(evt:MouseEvent){ Sugestão para teste: clique e arraste um dos retângulos e depois clique no retângulo que ficou sob ele. Perceba que o retângulo clicado é trazido para frente! (Fonte: ActionScript.org) |










ShareThis