ActionScript/Adicionando e removendo child

Origem: Wikilivros, livros abertos por um mundo aberto.
Ir para: navegação, pesquisa

O ato de adicionar e remover objetos no ActionScript 3.0 sofreu grande mudança em comparação ao modo de ser fazer das versões anteriores. Para adicionar um objeto novo à lista de exibição basta chamar o método addChild().

var sp:Sprite = new Sprite();
var g:Graphics = sp.graphics;

// Desenhando um retângulo para exemplo
g.beginFill(0x000099, 1);
g.drawRoundRect(100, 100, 200, 150, 5, 5);
g.endFill();

// O método que fará com que ele seja exibido no palco...
addChild(sp);

Declarar somente addChild() faz com que ele seja adicionado ao palco no geral. Para adicioná-lo ao um contâiner de objetos (como um objeto MovieClip) você pode chamar o método addChild do clipe de filme que será o recipiente de Sprites, etc.:

var sp:Sprite = new Sprite();
var g:Graphics = sp.graphics;

// Desenhando um retângulo para exemplo
g.beginFill(0x000099, 1);
g.drawRoundRect(100, 100, 200, 150, 5, 5);
g.endFill();

// Clipe que será o recipiente
var mc:MovieClip = new MovieClip();

// Adicionando sp ao clipe...
mc.addChild(sp);

Você pode ver uma explicação completa sobre desenhar com códigos na seção de Desenhando com vetores.

Para remover um objeto chame-o através da função removeChild(). Só remover não irá tirar o objeto da memória; para isso, você precisa declarar seu valor como null. Assim, o coletor de lixo perceberá e o removerá da memória (se você quiser utilizar o objeto em outra ocasião não o remova da memória).

/* Baseando-se no exemplo anterior
Removendo o Sprite sp */
mc.removeChild(sp);

// Removendo da memória
sp = null;

Profundidade[editar | editar código-fonte]

Para inserirmos um objeto em uma determinada propriedade usamos o método addChildAt(), que leva dois parâmetros: o objeto em questão e a profundidade, que se for 0 ficará atrás de todos (é sempre um valor inteiro e positivo) e pode ser 1, 2, e assim por diante.

// Função para desenhar que retorna um Sprite
function desenhe(posX:int, posY:int, cor:uint):Sprite  {
    var sp:Sprite = new Sprite();
    var g:Graphics = sp.graphics; 
    g.beginFill(cor, 1);
    g.drawRoundRect(posX, posY, 200, 150, 5, 5);
    g.endFill();
    return sp;
}

addChildAt(desenhe(50,50, 0x000099), 0);
addChildAt(desenhe(40,100, 0x009900), 1); // Este ficará na frente do retângulo azul

Para remover um objeto de uma determinada profundidade use o método removeChildAt() com o número dela.

removeChildAt(0); // Removerá o retângulo verde