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;
Profundidade
editarPara 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