Ir para conteúdo

POWERED BY:

Arquivado

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

André - Editor

Fazer um FOR para criar movieClips com instancias diferentes...

Recommended Posts

Galera, minha cabeça está para explodir... não aguento mais tentar possibilidades de fazer essa coisa ai...

 

Quero simplesmente ler um XML que tem o endereço de cada imagem... ele vai pegar cada uma e colocar dentro de um movieclip e dar um stance name diferente pra cada movie clip desse, para q depois eu possa posicionar cada um deles numa posicao diferente...

 

pra comecar a classe LOAD não cria movie clip, então ja me quebra ae... e depois ele ta criando um por cima do outro...

 

//cria a função que irá ler o XML
function leiaXML (event:Event):void {
   /*cria o objeto XML contendo a informações
   do arquivo externo usando a propriedade URLLoader.data*/
   var imgsXML:XML = new XML(imgsXML.data);

//salvar na variavel o número de thumbs que existe
var numberThumbs:int = imgsXML.thumbs.thumb.length();

//cria um mcContainerThumb para cada thumb que existir
for (var thumbs:Number = 0; thumbs < numberThumbs; thumbs++){
	var mcImgLoader:Loader = new Loader();
	mcImgLoader.name = 'mcImgLoader' + thumbs;
	mcImgLoader.load(new URLRequest(imgsXML.thumbs.thumb[thumbs]));
	addChild(mcImgLoader);
};
trace(mcImgLoader.name);
};

 

O que acontece é que ele não está criando 5 MC`s com 5 Instance Names diferentes, que é exatamente o que eu quero que ele faça...

 

Onde estou errando?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que assim criaria do modo certo, mas seu trace está fora do for, como sabe que nã oestá dando o name certo? coloque um clique em cada um e na função pega o target.name deles

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim cara, ele dentro do for ele diz que tem todos os 5...

 

mas acontece q se eu tento me direcionar a qualker um atraves por exemplo de:

 

mcImgLoader.x = 100;

 

ele faz isso pra TODOS... como que eu poderia me referir a cada um deles, pra ir posicionando um do lado do outro????

 

Por exemplo, se eu tentar:

 

//cria a função que irá ler o XML
function leiaXML (event:Event):void {
   /*cria o objeto XML contendo a informações
   do arquivo externo usando a propriedade URLLoader.data*/
   var imgsXML:XML = new XML(imgsXML.data);

//salvar na variavel o número de thumbs que existe
var numberThumbs:int = imgsXML.thumbs.thumb.length();

//cria um mcContainerThumb para cada thumb que existir
for (var thumbs:Number = 0; thumbs < numberThumbs; thumbs++){
	var mcImgLoader:Loader = new Loader();
	mcImgLoader.name = 'mcImgLoader' + thumbs;
	mcImgLoader.load(new URLRequest(imgsXML.thumbs.thumb[thumbs]));
	addChild(mcImgLoader);
	trace(mcImgLoader.name);
	mcImgLoader1.x = 10;
};
};

 

ai teoricamente o mcImgLoader1 deveria ficar na posição 10 no eixo X, no entando ele da erro e diz que não encontro esse movie clip (mcImgLoader1)...

 

 

 

e assim:

 

//cria a função que irá ler o XML
function leiaXML (event:Event):void {
   /*cria o objeto XML contendo a informações
   do arquivo externo usando a propriedade URLLoader.data*/
   var imgsXML:XML = new XML(imgsXML.data);

//salvar na variavel o número de thumbs que existe
var numberThumbs:int = imgsXML.thumbs.thumb.length();

//cria um mcContainerThumb para cada thumb que existir
for (var thumbs:Number = 0; thumbs < numberThumbs; thumbs++){
	var mcImgLoader:Loader = new Loader();
	mcImgLoader.name = 'mcImgLoader' + thumbs;
	mcImgLoader.load(new URLRequest(imgsXML.thumbs.thumb[thumbs]));
	addChild(mcImgLoader);
	trace(mcImgLoader.name);
	mcImgLoader.x = 100;
};
};

 

ele movimenta TODOS os mcs pra posição 100 :/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faz sentido porque no primeiro loop ele forma o mcImgLoader0 e nesse momento ele ainda não existe o mcImgLoader1, dai ele da o erro, mas pra resolver o seu problema, você pode criar uma variavel numérica que a cada child que você coloca, ele vá somando sua largura a variavel e colocando um sempre ao lado do outro, ou pode usar a largura multiplicada pelo thumbs, se todos tiverem a mesma largura, exemplo 1:

 

//cria a função que irá ler o XML
function leiaXML (event:Event):void {
   /*cria o objeto XML contendo a informações
   do arquivo externo usando a propriedade URLLoader.data*/
   var imgsXML:XML = new XML(imgsXML.data);

       //salvar na variavel o número de thumbs que existe
       var numberThumbs:int = imgsXML.thumbs.thumb.length();

       var posX:Number = 0;
       //cria um mcContainerThumb para cada thumb que existir
       for (var thumbs:Number = 0; thumbs < numberThumbs; thumbs++){
               var mcImgLoader:Loader = new Loader();
               mcImgLoader.name = 'mcImgLoader' + thumbs;
               mcImgLoader.load(new URLRequest(imgsXML.thumbs.thumb[thumbs]));
               addChild(mcImgLoader);
               trace(mcImgLoader.name);
               mcImgLoader.x = posX;
               posX += mcImgLoader.width + 2; // Sendo que 2 são 2 px de espaçamento
       };
};

 

 

Exemplo 2:

 

//cria a função que irá ler o XML
function leiaXML (event:Event):void {
   /*cria o objeto XML contendo a informações
   do arquivo externo usando a propriedade URLLoader.data*/
   var imgsXML:XML = new XML(imgsXML.data);

       //salvar na variavel o número de thumbs que existe
       var numberThumbs:int = imgsXML.thumbs.thumb.length();

       //cria um mcContainerThumb para cada thumb que existir
       for (var thumbs:Number = 0; thumbs < numberThumbs; thumbs++){
               var mcImgLoader:Loader = new Loader();
               mcImgLoader.name = 'mcImgLoader' + thumbs;
               mcImgLoader.load(new URLRequest(imgsXML.thumbs.thumb[thumbs]));
               addChild(mcImgLoader);
               trace(mcImgLoader.name);
               mcImgLoader1.x = (mcImgLoader.width * thumbs) + (2 * thumbs);
       };
};

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa cara, valeu a ajuda!

 

Consegui fazer de uma outra maneira:

 

//cria a função que irá ler o XML
function leiaXML (event:Event):void {
   /*cria o objeto XML contendo a informações
   do arquivo externo usando a propriedade URLLoader.data*/
   var imgsXML:XML = new XML(imgsXML.data);

//salvar na variavel o número de thumbs que existe
var numberThumbs:int = imgsXML.thumbs.thumb.length();

//cria um mcContainerThumb para cada thumb que existir
for (var thumbs:Number = 0; thumbs < numberThumbs; thumbs++){
	var mcImgLoader:Loader = new Loader();
	mcImgLoader.name = 'mcImgLoader' + thumbs;
	mcImgLoader.load(new URLRequest(imgsXML.thumbs.thumb[thumbs]));
	mcImgLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteImgLoader);
	mcImgLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgressImgLoader);
};
};

function onCompleteImgLoader(event:Event)
{
contadorThumbs++;
addChild(event.target.content);
event.target.content.x = contadorThumbs * 110;
}

function onProgressImgLoader(event:ProgressEvent)
{
var percent:Number = event.target.bytesLoaded / event.target.bytesTotal * 100;
trace(percent);
}

 

Agora ta perfeito, entretanto, eu to kerendo fazer o seguinte:

 

Na minha library eu tenho um mc SIMPLES com linkage de nome mcPreloader.

 

Dentro desse mc tem um campo de texto dinâmico com o nome de preloaderTxt

 

Eu queria fazer assim, enquanto cada imagem ta sendo carregada, ela recebe um mcPreloader desse (addChild) e vai imprimindo no campo de texto dele o valor da variável percent que aí está no código (por enquanto ela só ta em trace aparecendo perfeitamente no output a de cada imagem certinho).

 

Ai quando chegar a 100% ele remove o preloader e coloca a imagem...

 

Tem idéia de como? Tentei algumas coisas aki, mas a todas ou saiu coisa bizarra ou não funfou :/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você está criando um Loader, o ideal seria você criar um sprite ou movieclip, dentro dele dar um addchild do loader e um addchild do preloader, dai fica fácil você controlar a visibilidade dos dois, pois estarão dentro do mesmo objeto.

Compartilhar este post


Link para o post
Compartilhar em outros sites

pois eh... isso q tava na duvida.. pq agora eu tb to kerendo adicionar um buttonMode true para cada imagem, mas ele diz q o loader não pode receber essa propriedade...

 

e agora?!

 

stop();

import flash.events.Event;
import flash.net.URLRequest;
import flash.display.Loader;
import flash.events.ProgressEvent;
import flash.display.MovieClip;

//criamos variaveis para URLrequest e URLLoader
var meuURL:URLRequest = new URLRequest("imgs.xml");
var imgsXML:URLLoader = new URLLoader();

/*fazemos o download do arquivo externo
pelo método URLLoader.load()*/
imgsXML.load(meuURL);

/*adicionamos um ouvinte para o URLLoader
utilizamos o Evento de carregar por completo
e chamamos a função LeiaXML*/
imgsXML.addEventListener (Event.COMPLETE, leiaXML);

//seta a variável que irá contar as thumbs na função onCompleteImgLoader
var contadorThumbs:uint = -1;

//cria a função que irá ler o XML
function leiaXML (event:Event):void {
   /*cria o objeto XML contendo a informações
   do arquivo externo usando a propriedade URLLoader.data*/
   var imgsXML:XML = new XML(imgsXML.data);

//salvar na variavel o número de thumbs que existe
var numberThumbs:int = imgsXML.thumbs.thumb.length();

//cria um mcContainerThumb para cada thumb que existir
for (var thumbs:Number = 0; thumbs < numberThumbs; thumbs++){
	var mcImgLoader:Loader = new Loader();
	mcImgLoader.name = 'mcImgLoader' + thumbs;
	mcImgLoader.load(new URLRequest(imgsXML.thumbs.thumb[thumbs]));
	mcImgLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteImgLoader);
	mcImgLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgressImgLoader);
};
};

function onCompleteImgLoader(event:Event)
{
   var imgsXML:XML = new XML(imgsXML.data);
var numberThumbs:int = imgsXML.thumbs.thumb.length();
var sizeThumb:int = imgsXML.thumbs.@size;
var imgsWidth:int = numberThumbs * sizeThumb;

contadorThumbs++;
addChild(event.target.content);
event.target.content.x = stage.width / 2 - imgsWidth / 2 + contadorThumbs * 110;
event.target.content.y =  stage.height - 60;
}

function onProgressImgLoader(event:ProgressEvent)
{
var percent:Number = event.target.bytesLoaded / event.target.bytesTotal * 100;
trace(percent);
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

sim, mas como eu vou criar a mesma quantidade de mC`s e depois como q eu vou dizer pra cada imagem em qual mc ela deve entrar?

 

Tipo eu vou fazer um for e criar X quantidade de MC`s vazios.

 

Depois eu ja tenho esse for q faz os loads das imagens...

 

Agora como faço pra dizer, img0.load vai pra dentro do mc00, img1.load vai pra dentro do mc01 e assim por diante?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa, esquece tudo que tinha escrito aki antes, agora consegui:

 

stop();

import flash.events.Event;
import flash.net.URLRequest;
import flash.display.Loader;
import flash.events.ProgressEvent;
import flash.display.MovieClip;
import flashx.textLayout.events.ModelChange;
import flash.events.MouseEvent;

//criamos variaveis para URLrequest e URLLoader
var meuURL:URLRequest = new URLRequest("imgs.xml");
var imgsXML:URLLoader = new URLLoader();

/*fazemos o download do arquivo externo
pelo método URLLoader.load()*/
imgsXML.load(meuURL);

/*adicionamos um ouvinte para o URLLoader
utilizamos o Evento de carregar por completo
e chamamos a função LeiaXML*/
imgsXML.addEventListener (Event.COMPLETE, leiaXML);

//seta a variável que irá contar as thumbs na função onCompleteImgLoader
var contadorThumbs:int = -1;

//cria a função que irá ler o XML
function leiaXML (event:Event):void {
   //cria o objeto XML contendo a informações do arquivo externo usando a propriedade URLLoader.data
   var imgsXML:XML = new XML(imgsXML.data);

//salva na variável o número de thumbs que existe
var numberOfThumbs:int = imgsXML.thumbs.thumb.length();

//cria os objetos Loaders para receberem as imagens indicadas pelo XML e adicionando um listener em cada um para realizar o preload e a função principal ao final
for (var thumbNumber:Number = 0; thumbNumber < numberOfThumbs; thumbNumber++){
	var mcImgLoader:Loader = new Loader();
	mcImgLoader.load(new URLRequest(imgsXML.thumbs.thumb[thumbNumber]));
	mcImgLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgressImgLoader);
	mcImgLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteImgLoader);
};
};

function onProgressImgLoader(event:ProgressEvent)
{
var percent:Number = event.target.bytesLoaded / event.target.bytesTotal * 100;
trace(percent);
}

function onCompleteImgLoader(event:Event)
{
//adiciona 1 a variável que marca a quantidade de thumbs
contadorThumbs++;

//cria as variáveis para calcular o tamanho total de todas as thumbs somadas e assim posicioná-las no palco
   var imgsXML:XML = new XML(imgsXML.data);
var numberThumbs:int = imgsXML.thumbs.thumb.length();
var sizeThumb:int = imgsXML.thumbs.@size;
var imgsWidth:int = numberThumbs * sizeThumb;

//cria os MC`s no palco para receberem os objetos Loader e dá um nome diferente a cada um com base na quantidade de thumbs existentes no XML
var mcContainerImg:MovieClip = new MovieClip;
mcContainerImg.name = 'mcContainerImg' + contadorThumbs;

//adiciona os MC`s ao palco
addChild(mcContainerImg);

//adiciona a cada MC um container Loader
mcContainerImg.addChild(event.target.content);

//posiciona os MC`s contendo as imagens no palco
mcContainerImg.x = stage.width / 2 - imgsWidth / 2 + contadorThumbs * 110;
mcContainerImg.y = stage.height - 80;

//seta os MC`s como botões e adiciona os listeners de cada um
mcContainerImg.buttonMode = true;
mcContainerImg.addEventListener(MouseEvent.CLICK, onClickImg);
}

function onClickImg(event:MouseEvent){
trace('teste');
}

 

 

Agora o problema CRUCIAL! Como fazer CADA um dos botões executar uma função diferente???? E como criar essa função pra cada botão?!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Porque precisa ser uma funcao diferente? Bastaria uma funcao e uma classe pra representar o que você queira fazer. No seu exemplo você deve querer abrir a miniatura, dai você cria uma classe para a fotoGrande e na function você so instancia o objeto e passa alguns parametros e resolve.

 

Abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, primeiramente muito obrigado pela ajuda Matheus!

 

Você teria como me dar um pequeno exemplo de como fazer isso?

 

Obrigado cara!

 

PS: A estrutura do meu XML ta assim:

 


<imgs>
  <thumbs size="100">
     <thumb>endereço thumb 1.jpg</thumb>
     <thumb>endereço thumb 2.jpg</thumb>
     <thumb>endereço thumb 3.jpg</thumb>
  </thumbs>
  <mediums size="400">
     <medium>endereço da imagem media 1.jpg</medium>
     <medium>endereço da imagem media 2.jpg</medium>
     <medium>endereço da imagem media 3.jpg</medium>
  </mediums>
  <larges size="800">
     <large>endereço imagegem grande 1.jpg</large>
     <large>endereço imagegem grande 2.jpg</large>
     <large>endereço imagegem grande 3.jpg</large>
  </larges>
</imgs>

 

abraços!

 

 

Temporariamente eu fiz o meu código assim, e ele carrega a imagem ESPECÍFICA que eu setei... como faço pra ele saber qual imagem carregar?!

 

stop();

import flash.events.Event;
import flash.net.URLRequest;
import flash.display.Loader;
import flash.events.ProgressEvent;
import flash.display.MovieClip;
import flash.events.MouseEvent;

//criamos variaveis para URLrequest e URLLoader
var meuURL:URLRequest = new URLRequest("imgs.xml");
var imgsXML:URLLoader = new URLLoader();

/*fazemos o download do arquivo externo
pelo método URLLoader.load()*/
imgsXML.load(meuURL);

/*adicionamos um ouvinte para o URLLoader
utilizamos o Evento de carregar por completo
e chamamos a função LeiaXML*/
imgsXML.addEventListener (Event.COMPLETE, leiaXML);

//seta a variável que irá contar as thumbs na função onCompleteImgLoader
var contadorThumbs:int = -1;

//cria a função que irá ler o XML
function leiaXML (event:Event):void {
   //cria o objeto XML contendo a informações do arquivo externo usando a propriedade URLLoader.data
   var imgsXML:XML = new XML(imgsXML.data);

//salva na variável o número de thumbs que existe
var numberOfThumbs:int = imgsXML.thumbs.thumb.length();

//cria os objetos Loaders para receberem as imagens indicadas pelo XML e adicionando um listener em cada um para realizar o preload e a função principal ao final
for (var thumbNumber:Number = 0; thumbNumber < numberOfThumbs; thumbNumber++){
	var mcThumbLoader:Loader = new Loader();
	mcThumbLoader.load(new URLRequest(imgsXML.thumbs.thumb[thumbNumber]));
	mcThumbLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgressImgLoader);
	mcThumbLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteImgLoader);
};
};

function onProgressImgLoader(event:ProgressEvent)
{
var percent:Number = event.target.bytesLoaded / event.target.bytesTotal * 100;
trace(percent);
}

function onCompleteImgLoader(event:Event)
{
//adiciona 1 a variável que marca a quantidade de thumbs
contadorThumbs++;

//cria as variáveis para calcular o tamanho total de todas as thumbs somadas e assim posicioná-las no palco
   var imgsXML:XML = new XML(imgsXML.data);
var numberThumbs:int = imgsXML.thumbs.thumb.length();
var sizeThumb:int = imgsXML.thumbs.@size;
var imgsWidth:int = numberThumbs * sizeThumb;

//cria os MC`s no palco para receberem os objetos Loader e dá um nome diferente a cada um com base na quantidade de thumbs existentes no XML
var mcContainerImg:MovieClip = new MovieClip;
mcContainerImg.name = 'mcContainerImg' + contadorThumbs;

//adiciona os MC`s ao palco
addChild(mcContainerImg);

//adiciona a cada MC um container Loader
mcContainerImg.addChild(event.target.content);

//posiciona os MC`s contendo as imagens no palco
mcContainerImg.x = stage.width / 2 - imgsWidth / 2 + contadorThumbs * 110;
mcContainerImg.y = stage.height - 60;

//seta os MC`s como botões e adiciona os listeners de cada um
mcContainerImg.buttonMode = true;
mcContainerImg.addEventListener(MouseEvent.CLICK, onClickImg);
}

function onClickImg(event:MouseEvent){
var imgsXML:XML = new XML(imgsXML.data);

var mcMediumLoader:Loader = new Loader();
mcMediumLoader.load(new URLRequest(imgsXML.mediums.medium[0]));
addChild(mcMediumLoader);
mcMediumLoader.x = stage.width / 2 - 415;
mcMediumLoader.y = 110;
}

 

Alguem pra ajudar?

 

Por galera! Dá um help ae!

 

3 Dias já quebrando a cabeça por causa disso :/

 

Jura que mais ninguem pode me ajudar?

 

Pow, varios dias, varias tentativas e nada :/

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.