Ir para conteúdo

POWERED BY:

Arquivado

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

Frederico Félix

Problema com Loading :)

Recommended Posts

Olá, boa tarde galera

Estou com um probleminha aqui com um loading, tenho um mc instanciado de "thumber", dentro dele tem outro mc que irá carregar a imagem instanciado de "alvo", juntamente com 2 textos, cat (titulo) e contagem (porcentagem).

 

esta dando tudo certo, porem so carrega certinho a ultima imagem, eu so gostaria que o alvo ficasse com alpha 0 ate carregar e depois ele aparecesse com alpha 100...

 

aqui esta o codigo:

 

stop();
i = 0;
System.useCodepage = true;
var xmll = new XML();
var thumbb = new MovieClip();
var numberNode;
xmll.ignoreWhite = true;
xmll.onLoad = function(sucess)
{
	if (sucess == true)
	{
		numberNode = this.firstChild.childNodes.length;
		for (var i = 0; i < numberNode; i++)
		{
			thumbb = thumber.attachMovie("thumber", "id"+i, i);
			thumbb._x = i * 200;
			thumbb.cat.text = this.firstChild.childNodes[i].childNodes[0].firstChild.nodeValue.toString();
			carregathumb = this.firstChild.childNodes[i].childNodes[2].firstChild.nodeValue.toString();

			var myLoader_mc:MovieClipLoader = new MovieClipLoader();
			var mcListener:Object = new Object();

			thumbb.alvo._alpha = 0;
			
			mcListener.onLoadProgress = function(target_mc:MovieClip)
			{
				var prog:Object = myLoader_mc.getProgress(target_mc);
				var pctLoaded:Number = Math.round((prog.bytesLoaded/prog.bytesTotal)*100);
				thumbb.contagem.text = pctLoaded;
			};
			
			mcListener.onLoadComplete = function(target_mc:MovieClip)
			{
				thumbb.contagem.text = "done ;)";
				thumbb.alvo._alpha = 100;
			}
			
			myLoader_mc.addListener( mcListener );
			myLoader_mc.loadClip( carregathumb , thumbb.alvo );

		}
	}
};
xmll.load("gallery. xml");

Espero que possam me ajudar ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então não faça esse código de comparação no onloadcomplete

 

Faça no onloadProgress

ai você comparar os bytes e se tiver 100%

Você da o alpha

 

Abraços

 

mas o codigo de comparacao nao esta no onloadcomplete ;)

esta no onloadprogress...

 

o problema nao é com o alpha, é com o proprio carregamento, ele nao carrega

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloque:

 

var myLoader_mc:MovieClipLoader = new MovieClipLoader();

var mcListener:Object = new Object();

 

Para fora da função e do for

 

e o listener também

 

E ai tente novamente.

 

Quando o alpha... não existe nenhum tipo de comparação ali no seu for e no onLoadProgress

E não coloque um for para fazer isso... se quer carregar 1 por vez use uma re chamada de função com um contador.

 

Assim por o for chamar diversas vezes a mesma coisa, você vai acabar quebrando a chamada... e nada do listener vai funcionar.

 

Coloque todos os listenrs obj.onloadprogress onloadcomplete

Para fora do for... e assim vai

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vou repetir mais uma vez...

 

Listener não funciona dentro de um for...

ex:

 

for(i = 0; i < 10; i++){
 var mcl:MovieClipLoader = new MovieClipLoader();
 var mc:MovieClip = _root.createEmptyMovieClip('mc'+i, i);
 var obj:Object = new Object();
 mcl.addListener(obj);
 
 mcl.loadClip('banner1.jpg', mc);
 
 obj.onLoadInit = function(alvo:MovieClip){
 trace('hi im '+alvo._name);
 }
}

Isso ai vai parar na primeira volta fo for ;)

 

Agora isso aqui:

var i:Number = 0;
var mcl:MovieClipLoader = new MovieClipLoader();

var obj:Object = new Object();
 
function init(){
 var mc:MovieClip = _root.createEmptyMovieClip('mc'+i, i);

 mcl.loadClip('banner1.jpg', mc);
 
 obj.onLoadInit = function(alvo:MovieClip){
 trace(i);
 trace('olá: '+alvo._name);
 if(i < 10){
 i++;
 init();
 }
 }
}
mcl.addListener(obj);
init();

Vai funcionar 10 vezes e tudo perfeito

 

Assim que seria a melhor maneira de se fazer:

var i:Number = 0;
var mcl:MovieClipLoader = new MovieClipLoader();

var obj:Object = new Object();
 
function init(){
 var mc:MovieClip = _root.createEmptyMovieClip('mc'+i, i);
 mcl.loadClip('banner1.jpg', mc);
}

obj.onLoadInit = function(alvo:MovieClip){
 trace(i);
 trace('olá: '+alvo._name);
 if(i < 10){
 i++;
 init();
 }
}

mcl.addListener(obj);
init();

É mais organizado e também funciona perfeitamente bem

Agora veja o que você quer fazer ;)

 

E bons estudos

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa,

Obrigado pelas respostas berseck,

estou tentando isso a um tempo ja, agora ele funcionou de um certo modo,

ele carrega só 1 thumb,

 

olha o que eu quero fazer:

 

Mostrar varias imagens pequenas com descricoes que vem de um xml...

mas antes de mostrar, ter um loading para cada thumb.

 

No ultimo exemplo que voce me mandou agora, ele so mostra 1, e da o trace mostrando os 10mcs.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Errr

 

Como você montou isso???

 

Você botou a array com o contador... para ir mudando e carregando as diferentes imagens?

Usou o progress?

 

Pois o exemplo que eu dei foi bem simples carregando a mesma imagem 10 vezes.

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

entao, a minha ideia nao é montar a mesma imagem 10 vezes, é so puxar as imagens com os titulos do xml tipo assim:

 

<content>
     <titulo>titulo 1</titulo>
     <img>img/thumb1.jpg</img>
</content>

<content>
     <titulo>titulo 2</titulo>
     <img>img/thumb2.jpg</img>
</content>

Nessa caso iria mostrar 2 imagens com os respectivos titulos... entendeu?

porem eu quero que carregue as imagens antes de mostra-las, nao estou falando de loading de movieClipLoader, mais de carregamento de imagens mesmo (%)

 

seria +- isso:

http://activeden.net/item/xml-driven-horizontal-image-scroller/19113

 

nao estou falando de efeito, so puxar as imagens e titulos do xml, mas antes de mostrar as imagens, carregar elas

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então...

 

Você pelo visto não entende como funciona a classe

Vou explicar melhor para quem sabe assim lhe de uma luz

 

//Crio a variavel que vai conter a classe MovieClipLoader
var mcl:MovieClipLoader = new MovieClipLoader();
//Crio agora o objeto ouvinte da classe
var obj:Object = new Object();

//Agora vou adicionar o ouvinte a classe, para que ele possa acessar as funções de cada imagem
mcl.addListener(obj);

//Agora vou criar um clip vazio para que eu possa carregar a minha imagem
var mc:MovieClip = this.createEmptyMovieClip('mc', 1);

//Agora eu vou usar uma das funções da classe MovieClipLoader a loadClip() e carregar no clip vazio
mcl.loadClip('imagem.jpg', mc);

/*
* Agora eu tenho 5 funções que refletem dessa criação
* São elas:
* onLoadComplete()
* onloadcomplete só é chamada quando termina o carregamento, ou seja completa o processo
* onLoadError()
* onloaderror só é chamada caso aconteça algum erro durante o carregamento, é bom para depurar erros de carregamento
* onLoadInit()
* onloadinit é iniciada assim que o clip startar
* onLoadProgress()
* onloadprogress funciona para o progresso de um clip
* onLoadStart()
* onloadstart é para quando começar a carregar a imagem, ou seja ela é uma das primeiras a serem disparadas
*/

//Aqui é quando ta carregando
obj.onLoadProgress = function(imagem:MovieClip){
trace("carregando");
var total:Number = imagem.getBytesTotal();
var loaded:Number = imagem.getBytesLoaded();
trace("bytesLoaded: " + loaded + " bytesTotal: " + total);
}
//Essa aqui quando completa o carregamento, você pode chamar a função para carregar outra foto por exemplo
obj.onLoadComplete = function(imagem:MovieClip){
trace("carreguei o arquivo completamente");
}
//Função que ao iniciar o clip você já tem todas as propriedades do mesmo, é aqui que você faz resize... etc
obj.onLoadInit = function(imagem:MovieClip){
trace("iniciei");
if(imagem._width > Stage.width or imagem._height > Stage.height){
imagem._xscale = imagem._yscale = ((Stage.width)*(100))/imagem._width;
}
trace("iniciei reduzi a escala da imagem");
}
//A função que ao dar erro você pode dizer que erro que deu aqui
obj.onLoadError = function(){
trace("Erro ao carregar o arquivo");
}
// A função que ao startar você pode chamar outras coisas
obj.onLoadStart = function(){
trace("iniciei o carregamento da foto "+foto);
}

Bom acho que agora eu expliquei para que serve cada uma... com exemplos de como funciona.

 

O que você tem que fazer é colocar os dados do XML ou TXT em um array... e fazer um loop nesse array como eu expliquei. SEM USAR O FOR

E ai carregar só o numero de imagens que você quer.

 

Existem alguns tutoriais com exemplos nos artigos e tutoriais que você pode seguir para tirar sua dúvida.

 

Espero que agora pelo menos sobre o MovieClipLoader eu tenha matado as dúvidas ;)

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Usar dentro de um for você poder pode...

 

Mas como já expliquei antes ela perde as qualidades.

Tem que fazer algumas alterações para que funcione... e da mais trabalho do que simplesmente jogar para fora a função ;)

 

E fora que o for não respeitaria esperar terminar um download para ele continuar... ele faria as ações seguidas sem aguardar.

 

Você pode fazer isso usando a função start, mas tbm vai perder a propriedade... teria que criar um objeto relacionado para cada... e bla bla bla...

Ai tem que passar a usar o addListener(this)

 

Que ai você pode chamar as funções de outras maneiras.

Da uma lida nisso ;)

Que da pra se aprender muitas coisas

 

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.