Tutorial Action Script 3 - 008

   

Em continuação com o tutorial ( 001 - 002 - 003 - 004 - 005 - 006 - 007)

 

4.3. Removendo objectos da display list. removeChild ():

 

O processo para remover child’s do stage ou de algum elemento é bem simples e muito parecido com o processo de os adicionar. O método removeChild() está também presente em muitos dos elementos gráficos, pelo que usamos apenas:

 

removeChild(painel) 

e eliminaria-mos o child painel bem como todo o seu conteúdo que inclui o nosso objecto comboBox.

 

Alem deste processo podemos usar também o método removeChildAt() que recebe como parâmetro o número/index do (child) objecto em causa, número/index esse que é atribuído automaticamente pela display list, no exemplo em cima, o comboBox será o child com número/index 0, visto que é o único child adicionado ao painel, para o remover-mos devemos usar:

 

painel.removeChildAt(0); 

e o comboBox seria automaticamente removido do painel.

 

Vamos supor que na função em cima, adicionamos também um TextInput ao painel:

private var texto:TextInput = new TextInput();
//e em baixo adicionaríamos ao painel:
painel.addChild(combo);
painel.addChild(texto);

 

 

Aqui o texto passará a ser o child com o número/index 1, e para o remover teríamos que usar:

painel.removeChild(texto);

ou

painel.removeChildAt(1);

Como podem ver o processo é bastante simples, mas na realidade, o objecto foi só removido da displayList, mas continua residente na memória, fazendo com que o garbage collector o ignore na sua inspecção, mais uma vez se deve adoptar boas práticas, e para realmente remover estes objectos da memória, devemos usar:

 

//removidos do parent/displaylist
painel.addChild(combo);
painel.addChild(texto);
 
//removendo da memória:
combo=null;
texto=null;

Ou seja, devem sempre remove-lo da memória, caso contrário vai sobrecarregar a nossa aplicação.

 

Se por um lado remover objectos com o removeChildAt() pode ser rápido, por outro lado pode ser bastante penoso e complicado pelo simples facto que se tivermos 20 child’s no container, poderemos remover o child errado alem de ser complicado saber o número/index do respectivo, para isso existe algo que podemos usar para simplificar o processo; A propriedade .name dos objectos que identifica o objecto pelo nome na displayList, na função em cima bastaria dar os nomes aos 3 componentes (painel, comboBox e TextInput) :

antes de os adicionar-mos como childs, definimos:

 

painel.name="meu_painel1";
combo.name="meu_combo1";
texto.name="meu_texto1";

e para obter o numero do child painel, usariamos:

private var objeto:DisplayObject = getChildByName("meu_painel1");
private var num_painel:int = getChildIndex(objeto);

e finalmente para o remover:

removeChildAt(num_painel);

o mesmo se passaria com os childs combo e texto:

private var objeto_combo:DisplayObject = painel.getChildByName("meu_combo1");
private var num_combo:int = getChildIndex(objeto_combo);
painel.removeChildAt(num_combo);
 
private var objeto_texto:DisplayObject = painel.getChildByName("meu_texto1");
private var num_texto:int = getChildIndex(objeto_texto);
painel.removeChildAt(num_texto);

Notem que aqui coloquei o painel. tanto no getChildByName como no removeChild, visto que os child’s combo e texto são filhos do painel.

 

4.4. Mudando a ordem dos childs na display List

 

Se por algum motivo quiser-mos trocar a ordem dos childs na display list, às vezes podemos querer fazê-lo, por exemplo ao adicionar um botão à aplicação e adicionar-mos depois um painel, o botão ficará coberto pelo painel, assim para colocar-mos o botão à frente do painel bastaria trocar a ordem deles na display list, vejamos:

 

private var btn:Button = new Button;
private var pnl:Painel = new Painel;
 
btn.x=25;
btn.width=125;
btn.y=50;
btn.name="but1";
addChild(btn);
 
pnl.x=20;
pnl.y=40;
pnl.width=250;
pnl.height=200;
pnl.name="painel1";
addChild(pnl);

Neste caso apenas veríamos o painel na nossa aplicação, ou seja, para vermos o botão teríamos ou que adicionar como filhos por outra ordem:

addChild(pnl); 
addChild(btn);

podemos ver as respectivas posições dos nossos componentes assim:

trace("->"+getChildAt(0).name);
trace("->"+getChildAt(1).name);

e veremos no output:

-> but1

-> paine1

Para os mudarmos na ordem (z), podemos usar as seguintes formas:

swapChildren(btn, pnl);

que troca a ordem dos componentes no eixo zz identificando pelos componentes, ou

swapChildrenAt(0, 1);

que os troca, identificando pelos seus números/index’s ou ainda:

btn.setChildIndex(2);

que coloca o nosso botão com o número/index 2, ou seja, acima do pnl (index=1).

 

Estas são algumas formas que permitem alterar o index dos componentes na displayList.

 

No próximo tutorial falaremos mais especificamente sobre a linguagem AS3, e a sua completa vertente de orientação a objectos.

 

ccommons    

http://creativecommons.org/licenses/by-nc-nd/3.0/deed.pt

versão pdf temporariamente indisponivel.
Deixe um comentário ou um Trackback

2 Trackbacks

  1. [...] 9:29 am Em continuação com o tutorial ( 001 - 002 - 003 - 004 - 005 - 006 - 007 - 008 [...]

  2. [...] 12:55 pm Em continuação com o tutorial ( 001 - 002 - 003 - 004 - 005 - 006 - 007 - 008 - [...]

Deixe um comentário

O seu email nunca será publicado ou partilhado. Campos obrigatórios estão marcados com um *

*
*