ActionScript/Adicionando e removendo child
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;
[editar] Profundidade
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