Ir para conteúdo

POWERED BY:

Arquivado

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

Ohrlando

Erro em carregar imagens xml

Recommended Posts

Olá tudo bem, sou novo no fórum, aqui vai meu primeiro post

 

Estou criando uma galeria em AS3 que puxa as url das imagens em um xml.

O problema que não entendo onde pode estar o erro, as thumbs não aparecem.

 

 

as thumbs da galeria puxa a classe externa que criei "Foto.as"

 

Foto.as:

package {	import flash.display.MovieClip;	import flash.display.Sprite;	//Dava erro aqui! WTH????? 
Imagem Postada //import fl.containers.UILoader; import flash.display.Sprite; import flash.events.Event; import com.greensock.*; import com.greensock.easing.*; import flash.events.MouseEvent; public class Foto extends Sprite { //Aqui o erro, não encontra UILoader private var loader:Sprite; var container:Sprite = new Sprite(); var contorno:Sprite = new Sprite(); function Foto(source:String):void { name = source; drawContorno(); drawLoader(); addEventListener(MouseEvent.MOUSE_OVER,onOver); addEventListener(MouseEvent.MOUSE_OUT,onOut); addEventListener(Event.ENTER_FRAME, onEnter_Frame); scaleThumb(); } function drawContorno():void{ contorno.graphics.lineStyle(2, 0xff66cc, .7); contorno.graphics.lineTo(0, 0); contorno.graphics.lineTo(0, 100); contorno.graphics.lineTo(110, 100); contorno.graphics.lineTo(110, 0); contorno.graphics.lineTo(0, 0); addChild(contorno); contorno.visible = false; } function drawLoader():void { container.graphics.lineStyle(2, 0xff66cc, .7); container.graphics.lineTo(0, 0); container.graphics.lineTo(0, 100); container.graphics.lineTo(110, 100); container.graphics.lineTo(110, 0); container.graphics.lineTo(0, 0); container.visible = false; addChild(container); //Erro aqui na hora de criar o objeto loader = new Sprite(); //loader.scaleContent = true; //loader.source = name; //loader.mouseEnabled = false; this.loader.x = 1; this.loader.y = 1; loader.width = 108; loader.height = 98; addChild(loader); } private function onEnter_Frame(event:Event):void{ if (MovieClip(parent.root).auxObj.name == name){ contorno.visible = true; } else { contorno.visible = false; } } private function onOver(event:MouseEvent):void{ container.visible = true; TweenLite.to (this, .2, {alpha: 1, scaleX:1, scaleY: 1}); } private function onOut(event:MouseEvent):void { TweenLite.to (this, .2, {alpha:.7, scaleX: .95, scaleY: .95, onComplete: hideContainer}); } private function hideContainer(){ container.visible = false; } private function scaleThumb():void { this.scaleX = .95; this.scaleY = .95; this.alpha = .75; } } }

Percebam que o código foi adaptado, antes usava UILoaders, mas por motivos estranhos e não conhecidos, ele parou de reconhecer UILoader, mesmo importando o fl.containers.UILoader Imagem Postada

Então adaptei em um Sprite.

 

A minha Galeria: "galeria.fla"

import com.greensock.*;import com.greensock.easing.*;//CONEXÃOvar urlRequest:URLRequest = new URLRequest("fotos_decoracao.xml");var urlLoader:URLLoader = new URLLoader();//XML e Listavar myXML:XML = new XML();var xmlList:XMLList = new XMLList();myXML.ignoreWhitespace = true;urlLoader.addEventListener(Event.COMPLETE, fileLoaded);urlLoader.load(urlRequest);//Auxiliar contadorvar aux:String;//Auxiliar na mudança de fotosvar auxObj:Object = new Object();//auxiliares na rolagemvar direita:Boolean = false;var esquerda:Boolean = false;//Quantidade de Thumbs (serve para verificar se necessita de rolagem ou não)var numThumb:Number = 0;//thumbs Loaded (mesma fim que o numThumb)var loaded:Boolean = false;auxObj.name = "imagens/decoracao/img_1.jpg";//caminho das thumbsvar arrayMiniURL:Array = new Array();//caminho das imagensvar arrayImgURL:Array = new Array();var arrayImg:Array = new Array();//photo containervar photoLoader:Loader = new Loader();photoLoader.alpha = 1;photoLoader.unload();//Foto InicialphotoLoader.load(new URLRequest("imagens/decoracao/img_1.jpg"));//Handler para alinhar a foto ao centrophotoLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, centerPhoto);//Add photoLoader ao viewerviewer.addChild(photoLoader);//carregou xmlfunction fileLoaded(evt:Event):void{	myXML = XML(evt.target.data);	xmlList = myXML.children();		for (var i:int=0; i < xmlList.length(); i++) {		//carregou todas as thumbs		if (i == Number(xmlList.length() - 1)) loaded = true;		if (loaded){			//se tiver menos que 5 fotos, não precisa do scroll			if (numThumb < 5) {				Scroll.scrollLEFT.visible = false;				Scroll.scrollRIGHT.visible = false;			}		}		numThumb += 1;		trace (numThumb + " " + loaded);				var picURL:String = xmlList[i].url_thumb;		var picName:String = xmlList[i].url_image;				arrayMiniURL.push(picURL);		arrayImgURL.push(picName);		arrayImg[i] = new Foto(arrayMiniURL[i]);				arrayImg[i].addEventListener(MouseEvent.CLICK,onClick);		arrayImg[i].name = arrayImgURL[i];		arrayImg[i].buttonMode = true;				arrayImg[i].y = 354.3;		arrayImg[i].x = i*110+6.67;		mcMenu.Thumbs.addChild(arrayImg[i]);	}}//Quando clicar nas thumbsfunction onClick(event:MouseEvent):void {	trace (event.currentTarget.name);	auxObj.name = event.currentTarget.name;	TweenLite.to (photoLoader, 1, {alpha: 0, onComplete: changePhoto});}//Muda a foto do viewfunction changePhoto():void{	photoLoader.unload();	photoLoader.load(new URLRequest(auxObj.name));}//centraliza a foto no viewfunction centerPhoto(evt:Event):void{	photoLoader.x = 372.5 - (photoLoader.width/2);	photoLoader.y = 190 - (photoLoader.height/2);	TweenLite.to (photoLoader, 1, {alpha:1});}Scroll.scrollLEFT.buttonMode = true;//para a rolagemScroll.addEventListener(MouseEvent.MOUSE_OUT, stopScroll);function stopScroll(evt:MouseEvent):void{	esquerda = false;	direita = false;}//vai pra esquerdaScroll.scrollLEFT.addEventListener(MouseEvent.MOUSE_OVER, scrollDOWN);function scrollDOWN(evt:MouseEvent){	direita = false;	esquerda = true;	}//vai para direitaScroll.scrollRIGHT.buttonMode = true;Scroll.scrollRIGHT.addEventListener(MouseEvent.MOUSE_OVER, scrollUP);function scrollUP(evt:MouseEvent){	esquerda = false;	direita = true;}//controla os limites das rolagensthis.addEventListener(Event.ENTER_FRAME, onenterFrame);function onenterFrame(event:Event){	if (mcMenu.Thumbs.x <= 1){		if (direita){			mcMenu.Thumbs.x += 2;		}	}	if (mcMenu.Thumbs.x <= -1){		esquerda = false;	}	if (esquerda){		mcMenu.Thumbs.x -= 2;	}}
Tem um mc chamado viewer no centro, tem um outro mc que nele tem um mc chamado Thumbs com uma máscara. em cada canto tem um scrollRIGHT e LEFT dentro do mc Scroll e entre as scrolls onde se encaixam as thumbs

 

e por fim o xml:

 

<?xml version="1.0" encoding="utf-8"?><images> <image> 	<url_thumb>imagens/decoracao_thumb/img_1.jpg</url_thumb>	<url_image>imagens/decoracao/img_1.jpg</url_image> </image> <image> 	<url_thumb>imagens/decoracao_thumb/img_2.jpg</url_thumb>	<url_image>imagens/decoracao/img_2.jpg</url_image> </image> <image> 	<url_thumb>imagens/decoracao_thumb/img_3.jpg</url_thumb>	<url_image>imagens/decoracao/img_3.jpg</url_image> </image> <image> 	<url_thumb>imagens/decoracao_thumb/img_4.jpg</url_thumb>	<url_image>imagens/decoracao/img_4.jpg</url_image> </image> <image> 	<url_thumb>imagens/decoracao_thumb/img_5.jpg</url_thumb>	<url_image>imagens/decoracao/img_5.jpg</url_image> </image> <image> 	<url_thumb>imagens/decoracao_thumb/img_6.jpg</url_thumb>	<url_image>imagens/decoracao/img_6.jpg</url_image> </image> <image> 	<url_thumb>imagens/decoracao_thumb/img_7.jpg</url_thumb>	<url_image>imagens/decoracao/img_7.jpg</url_image> </image> <image> 	<url_thumb>imagens/decoracao_thumb/img_8.jpg</url_thumb>	<url_image>imagens/decoracao/img_8.jpg</url_image> </image> <image> 	<url_thumb>imagens/decoracao_thumb/img_9.jpg</url_thumb>	<url_image>imagens/decoracao/img_9.jpg</url_image> </image> <image> 	<url_thumb>imagens/decoracao_thumb/img_10.jpg</url_thumb>	<url_image>imagens/decoracao/img_10.jpg</url_image> </image> <image> 	<url_thumb>imagens/decoracao_thumb/img_11.jpg</url_thumb>	<url_image>imagens/decoracao/img_11.jpg</url_image> </image></images>
Os caminhos estão certinhos Imagem Postada

 

 

Não entendo, não carrega nada no swf, só a primeira imagem.

PS: Eu tinha uma outra galeria que usei a mesma classe Foto.as, mas antes ela usava UILoader ao invés de Sprite, e funcionava perfeitamente. Criei essa galeria agora, com código muito parecido com o da primeira galeria, mas não funcionava, dava erro no Foto.as em todas as linhas que tinham algo com UILoader Imagem Postada

Até aí ok, adaptei pra Sprite e não dá mais erros.

 

alguém me ajuda plzz??

 

abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se isso aqui carrega:

photoLoader.load(new URLRequest("imagens/decoracao/img_1.jpg"));
Faça nos outros loads assim:

mcMenu.Thumbs.addChild(arrayImg[i].toString());
Converta os dados em string Imagem Postada as vezes o flash não entende... que é uma string ai ele não abre... vai da que o carregamento é falso.

 

Isso é um exemplo não prestei mta atenção onde no seu código você faz o load das imagens... Mas onde quer que você esteja fazendo o load tente fazer do jeito que eu disse.

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se isso aqui carrega:

photoLoader.load(new URLRequest("imagens/decoracao/img_1.jpg"));
Faça nos outros loads assim:
mcMenu.Thumbs.addChild(arrayImg[i].toString());
Converta os dados em string Imagem Postada as vezes o flash não entende... que é uma string ai ele não abre... vai da que o carregamento é falso.

 

Isso é um exemplo não prestei mta atenção onde no seu código você faz o load das imagens... Mas onde quer que você esteja fazendo o load tente fazer do jeito que eu disse.

 

Abraços

 

 

 

Opa e aí?

então eu coloquei mcMenu.Thumbs.addChild(arrayImg.toString()); mas deu o seguinte erro:

error: Cannot access a property or method of a null object reference.

at Foto/::onEnter_Frame()

 

e sem ele não dá erro algum, acho que não deve ser iso então Imagem Postada

 

assim, com o código que tá, ele simplesmente aparece uma única Thumb, sem a foto da miniatura, mas como no foto.as tem um action para criar a borda, nessa única thumb aparece a bordinha, pouso o mouse faz o tween certinho, e se clicar carrega a photodo centro certinho também. O problema que não aparece carregada nela a miniatura, e não acrescenta as outras thumbs, era para aparecer 11, so aparece um e incompleta ainda.

 

o load das imagens para as thumbs (a imagem das miniaturas) esta aqui

Foto.as

function Foto(miniURL:String, imgURL:String):void {			name = miniURL;			aux = imgURL;			...		}
aux serve só de momento, para saber a url da miniatura que ele deve carregar no momento em que é criado.

e em seguida ainda no Foto.as

 

function drawLoader():void {			...						loader = new Loader();			//loader.scaleContent = true;			loader.load(new URLRequest(aux));			loader.mouseEnabled = false;			...						addChild(loader);		}
Com isso, deveria carregar a imagem na miniatura.

aqui na classe "Foto", "name" serve pra armazenar a url de quando lá no stage ele for clicado function onClick no galeria.fla.

e no stage ele puxa aqui:

 

galeria.fla:

 

function onClick(event:MouseEvent):void {	trace (event.currentTarget.name);	auxObj.name = event.currentTarget.name;	TweenLite.to (photoLoader, 1, {alpha: 0, onComplete: changePhoto});}
onde auxObj é um objeto auxiliar somente para armazenar qual o thumb que foi clicado (event.currentTarget.name)

em seguida ainda no galeria.fla

 

 

function changePhoto():void{	photoLoader.unload();	photoLoader.load(new URLRequest(auxObj.name));}
a imagem do view troca

 

galeria.fla

 

 

...		var picURL:String = xmlList[i].url_thumb;		var picName:String = xmlList[i].url_image;				arrayMiniURL.push(picURL);		arrayImgURL.push(picName);				arrayImg[i] = new Foto(arrayMiniURL[i], arrayImgURL[i]);		...
aqui é a matriz que representa cada thumb, no new Foto passo o parâmetro arrayMiniURL (url da miniatura) e arrayImgURL (url da imagem a ser carregada no view)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Use o toString dentro do load e não no addChild o meu foi um exemplo infeliz... sorry

aqui se teria que usar:

loader.load(new URLRequest(aux.toString()));

Por exemplo e não no addChild

 

Abraços

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.