Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Naty

Unload de um loader em um for

Recommended Posts

Olá gente td bom ??

 

Estou com um probleminha que ainda nao consegui resolver... quem sabe vcs me dao uma luz...

 

Bom é o seguinte tenho um = new Loader sendo criado dimamicamente dentro de um For sendo puxado de um xml...

Porém em certa parte necessito que seja feito o unload() deste loader, pq qdo o usuario clica no bt fica acrescentando...

 

a questao é... ?? como fazer um unload() se a criaçao do Loader esta sendo feita no For ??

A variavel é global porem a criacao dela só é feita quando esta funcao que contem o for é chamada....

 

vou posta o codigo desa funcao apenas p/ ilustrar...

 

function exibiBabylook  () {
	camisetaBXML = new XML (camisetaBXMLLoader.data)
	tamanhoBabylook = camisetaBXML.*.length()
	//
	for (var i:uint=0; i<tamanhoBabylook; i++) {
		var novaCamisetaB:MovieClip = new MovieClip
		babylook_mc.addChild(novaCamisetaB)
		camisetas_mc.addChild(babylook_mc)
		//
		with (novaCamisetaB) {
			babylookLoader = new Loader // AKI ESTA MEU PROBLEMA.. PRECISO DAR UM UNLOAD() NESTA VARIAVEL FORA DESTA FUNCAO
			babylookRequest.url = "arquivos_maisProdutos/babylook/" + "/feminino" + (i +1)+ ".png" 
			babylookLoader.load(babylookRequest)
			//
			addChild(babylookLoader)
			babylookLoader.x = 260 * i
			babylookLoader.y = 0
			//
			buttonMode = true
			addEventListener(MouseEvent.CLICK, clicouCustomisa)
		}
		//Criação dinamica de variavel dentro de MC
		novaCamisetaB.customisa = "galeria_swf/babylook/" + camisetaBXML.*[i].@url
	}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Naty,

 

você quer remover uma imagem especifica do palco?

 

se for isso, dá um nome pra cada objeto Loader dentro do laço (você pode usar inclusive a variável i, para que cada nome seja diferente) assim:

 

babylookLoader.name = 'babylook'+i;

aí quando você precisar retirá-lo do palco, você retira o que quiser usando o nome:

 

novaCamisetaB.removeChild(novaCamisetaB.getChildByName('babylook2'));
fiz o exemplo com um nome fixo, mas é só pra mostrar. No seu caso você deve pegar esse nome de forma dinâmica, mas aí vai depender de em que situação isso vai ser feito.

 

usar simplesmente o unload não daria pois a variável babylookLoader aponta para um objeto diferente a cada loop. No caso só tiraria o objeto do ultimo loop.

 

agora, se você quer remover todas as imagens inseridas por esse for, é só criar mais um for com o numero de filhos do novaCamisetaB, e colocar um removeChildAt(0) nele =)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu prefiro usar array para guardar a instância dos objetos porque não me dou muito bem com o getChildByName rs

 

na minha opiniao cria um array global assim

 

var instancias:Array = new Array();

lá no seu FOR no final dele coloca:

 

instancias.push( novaCamisetaB );

depois para remover é só percorrer o vetor:

 

for each( item:MovieClip in instancias )
{
   this.removeChild( item ); // assim apaga todas as instâncias
}

Só um observação, o UNLOAD na verdade seta NULL para o objeto mas não o remove da memória, por isso removeChild é mais indicado pois este sim destroy o objeto deixando a memória marcada para limpeza pelo garbage collector.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu prefiro usar array para guardar a instância dos objetos porque não me dou muito bem com o getChildByName rs

 

na minha opiniao cria um array global assim

 

var instancias:Array = new Array();

lá no seu FOR no final dele coloca:

 

instancias.push( novaCamisetaB );

depois para remover é só percorrer o vetor:

 

for each( item:MovieClip in instancias )
{
   this.removeChild( item ); // assim apaga todas as instâncias
}

Só um observação, o UNLOAD na verdade seta NULL para o objeto mas não o remove da memória, por isso removeChild é mais indicado pois este sim destroy o objeto deixando a memória marcada para limpeza pelo garbage collector.

 

Daniel tentei fazer do seu jeito, pois achei mais simples... realmente usar getChildByName é meio complexo... porém esta me dando este erro...

 

1084: Syntax error: expecting in before colon.

 

function remover () {
	fundoFutebolLoader.visible = false
	paginaLoader.unload()
	//
	if(composicaoCamisas_mc) if(composicaoCamisas_mc.parent ) 
		composicaoCamisas_mc.parent.removeChild(composicaoCamisas_mc);
	if(composicaoFeminina_mc) if(composicaoFeminina_mc.parent ) 
		composicaoFeminina_mc.parent.removeChild(composicaoFeminina_mc);
	if(composicaoMeias_mc) if(composicaoMeias_mc.parent ) 
		composicaoMeias_mc.parent.removeChild(composicaoMeias_mc);
	//
	if(camisetaR_mc) if(camisetaR_mc.parent ) camisetaR_mc.parent.removeChild(camisetaR_mc);
	if(camisetaT_mc) if(camisetaT_mc.parent ) camisetaT_mc.parent.removeChild(camisetaT_mc);
	if(babylook_mc) if(babylook_mc.parent ) babylook_mc.parent.removeChild(babylook_mc);
	if(calcoes_mc) if(calcoes_mc.parent ) calcoes_mc.parent.removeChild(calcoes_mc);
	if(goleiro_mc) if(goleiro_mc.parent ) goleiro_mc.parent.removeChild(goleiro_mc);
	if(colete_mc) if(colete_mc.parent ) colete_mc.parent.removeChild(colete_mc);
	if(meiao_mc) if(meiao_mc.parent ) meiao_mc.parent.removeChild(meiao_mc);
	//
	if(bt_next) if(bt_next.parent ) bt_next.parent.removeChild(bt_next);
	if(bt_prev) if(bt_prev.parent ) bt_prev.parent.removeChild(bt_prev);
	//
	for each (novaCamisetaR:MovieClip in instancias ){
		this.removeChild(novaCamisetaR)
	}
}

var instancias:Array = new Array();
//

function exibiCamisetasR  () {
	camisetaRXML = new XML (camisetaRXMLLoader.data)
	tamanhoCamisetaR = camisetaRXML.*.length()
	//
	 for (var i:uint=0; i<tamanhoCamisetaR; i++){
		var novaCamisetaR:MovieClip = new MovieClip
		camisetaR_mc.addChild(novaCamisetaR)
		camisetas_mc.addChild(camisetaR_mc)
		 with (novaCamisetaR){
			camisetaRLoader = new Loader
			camisetaRRequest.url = "arquivos_galerias/arquivos_futebol/camisetas/" + "/camisa" + (i +1)+ ".png"  
			camisetaRLoader.load(camisetaRRequest)
			//
			addChild(camisetaRLoader)
			camisetaRLoader.x = 320 * i
			camisetaRLoader.y = 0
			//
			buttonMode = true
			addEventListener(MouseEvent.CLICK, clicouCustomisa)
			//
		}
		//Criação dinamica de variavel dentro de MC
		novaCamisetaR.customisa = "galeria_swf/recorte/" + camisetaRXML.*[i].@url
		instancias.push(novaCamisetaR)
	}
	composicaoCamisasLoader = new Loader
	composicaoCamisasLoader.load(composicaoCamisasRequest)
	composicaoCamisasLoader.x = 10
	composicaoCamisasLoader.y = 50
	//
	composicaoCamisas_mc.addChild(composicaoCamisasLoader)
	composicao_mc.addChild(composicaoCamisas_mc)
	//
	resetSeta ()
}

o que será q fiz errado... pois não entendi mto bem o que este erro esta acusandoo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Naty... deu uma olhada rápida de acordo com o erro retornado, e achei isso:

 

for each (novaCamisetaR:MovieClip in instancias ){
 this.removeChild(novaCamisetaR);
}

mesmo você tendo declarado o novaCamisetaR anteriormente, o for each vai usar uma variável local, que precisa ser declarada. Muda assim:

 

for each (var novaCamisetaR:MovieClip in instancias ){
 this.removeChild(novaCamisetaR);
}

e vê se funciona o restante =)

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

o que consegui foi perto disto

 

var instancias:Array = new Array();
//

function exibiFitness  () {
	fitnessXML = new XML (fitnessXMLLoader.data)
	tamanhoFitness = fitnessXML.*.length()
	//
	for (var i:uint=0; i<tamanhoFitness; i++) {
		var novoFitness:MovieClip = new MovieClip
		fitness.addChild(novoFitness)
		fitness_mc.addChild(fitness)
		//
		with (novoFitness) {
			fitnessLoader = new Loader
			fitnessRequest.url = "arquivos_galerias/arquivos_fitness/fitness/" + "/fitness" + (i +1)+ ".png" 
			instancias.push(fitnessLoader)
			fitnessLoader.load(fitnessRequest)
			//
			addChild(fitnessLoader)
			fitnessLoader.x = 240 * i
			fitnessLoader.y = 0
			//
			buttonMode = true
			addEventListener(MouseEvent.CLICK, clicouCustomisa)
		}
		//Criação dinamica de variavel dentro de MC
		novoFitness.customisa = "galeria_swf/fitness/" + fitnessXML.*[i].@url
		instancias.push(novoFitness)
	}
}

function remover () {
	fundoFitnessLoader.visible = false
	paginaLoader.unload()
	fitness_mc.visible = false
	//
	if(composicaoFitness_mc) if(composicaoFitness_mc.parent ) 
		composicaoFitness_mc.parent.removeChild(composicaoFitness_mc);
	//
	if(bt_next) if(bt_next.parent ) bt_next.parent.removeChild(bt_next);
	if(bt_prev) if(bt_prev.parent ) bt_prev.parent.removeChild(bt_prev);
	//
	instancias[0].unload()
}

porem queria remover todos os nós ?? como fazer ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

quando você diz remover todos os nós, é pra remover todos os MovieClips novoFitness que estão no Array instancias do palco e do próprio array?

 

se for, pode ser assim:

 

while(instancias.length > 0){
 fitness.removeChild(instancias[0]);
 instancias.splice(0,1);
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.