Ir para conteúdo

POWERED BY:

Arquivado

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

Godoi

setInterval + while ... não ta dando muito certo

Recommended Posts

Eai tudo bom com você's??

 

pois é.. tenho o seguinte codigo

 

vai = setInterval(MostraSwf, 3000);



function MostraSwf() {
	i = 0;
	while((i>=0) and (i<4)){
	retorno.load("http://localhost/tv/retorno.php");
	if (i == 0) {
		trace(retorno['descricao_produto' + i]);
		loadMovie(retorno['caminho_imagem' + i], "alvo_mc");
	} else if (i == 1) {
		trace(retorno['descricao_produto' + i]);
		loadMovie(retorno['caminho_imagem' + i], "alvo_mc");
	} else if (i == 2) {
		trace(retorno['descricao_produto' + i]);
		loadMovie(retorno['caminho_imagem' + i], "alvo_mc");
	} else if (i == 3) {
		trace(retorno['descricao_produto' + i]);
		loadMovie(retorno['caminho_imagem' + i], "alvo_mc");
	}
	i++;
	trace(i);
}

o problema é que a cada 3 segundos.. (que é o que o setInterval deveria fazer..) o ele conta Tudo de uma vez so.. ou seja.. no Output do flash aparece o 1, 2, 3, 4 de uma lapada so.. sendo que era pra demorar de um pro outro ou seja..

 

aparece o 1, (demora 3 segundos), aparece o 2, (demora 3 segundos).. e assim por diante.. o que ta errado ai?

 

vlw ai pessoal

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente assim:

var itens:Array = new Array();

 

retorno.load("http://localhost/tv/retorno.php");

retorno.onLoad = function(){

i = 0;

while((i>=0) and (i<4)){

itens.push(retorno['descricao_produto' + i]);

}

setInterval(MostraSwf, 3000);

var indice: Number = 0;

function MostraSwf() {

alvo.loadMovie(itens(indice % 4), "alvo_mc");

indice ++;

}

 

Só que isso online não deve funcionar bem, você precisa colocar um preloader e contar o tempo só a partir do momento que a imagem for carregada, as vezes os 3 segundos de intervalo nem deixa dar o tempo pra carregar a imagem entendeu?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oba carneirinho.. bãozin?

 

Pois e grande não deu muito certo oque você disse.. tipo

 

peguei so o começo da função

 

i = 0;
while((i>=0) and (i<4)){
itens.push(retorno['descricao_produto' + i]);

coloquei um trace(itens);.. so pra ver oque dava.. e mesmo sem o trace.. ela fazia o flash parar de responder e fechar sozinho!!!

 

acho que esqueci de mensionar.. esse sistema não vai ser online não.. vai ser um sistema de propaganda que vai ficar numa Tv.. o flash ta pegando esses valores qeu vem de um php.. que pegade um banco de dados Firebird...

 

tem alguma coisa a ver essa demora?!

 

abração!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você tem de ser paciente, está executando tudo de uma só vez, sem dar tempo para as imagem serem carregadas.

Eu ainda não sei pra que tem esse while ai no meio.

Pra fazer esse processo é um pouco mais complicado que isso.

E só um detalhe, nunca use and, eq... use &&, ==, !=, pois o que você esta usando caiu em desuso.

 

// Vamos configurar um monitorador de carregamento de MovieClip
 // Aqui vamos contar qual imagem será carregada
 var contar:Number = 1;
 // Temos de colocar alguem para identificar o set interval
 var intervalo:Number = 0;
 // Primeiro criamos um ouvinye para monitorar o carregamento
 var ouvinte:Object = new Object();
 ouvinte.onLoadComplete = function(target_mc:MovieClip, httpStatus:Number):Void {
	 trace(">> ouvinte.onLoadComplete()");
	 trace(">> =============================");
	 trace(">> target_mc._width: " + target_mc._width); // 0
	 trace(">> httpStatus: " + httpStatus);
 }
 ouvinte.onLoadInit = function(target_mc:MovieClip):Void {
	 trace(">> ouvinte.onLoadInit()");
	 trace(">> =============================");
	 trace(">> target_mc._width: " + target_mc._width); // > 0
	 // Agora que a imagem já foi carregada vamos solicitar o setInterval novamente.
	 intervalo = setInterval(carregarImagem,3000);
 }
 ouvinte.onLoadError = function(target_mc:MovieClip, errorCode:String,httpStatus:Number){
	 trace(">> ouvinte.onLoadError()");
	 trace(">> =============================");
	 // Se der algum erro tentamos chamar a próxima imagem
	 carregarImagem();
 }
 // Criamos o monitorador que vai uzar este ouvinte
 var monitorar:MovieClipLoader = new MovieClipLoader();
 monitorar.addListener(ouvinte);
 // Vamos criar a função que irá chamar as páginas.
 var carregarImagem:Function = function(){
	 // Paramos o setinterval para esperar que a imagem seja carregada
	 clearInterval(intervalo);
	 // Se contar for maior que o total, vamos recomeçar a contagem
	 if(contar > receber.total){
		 contar = 1;
	 }
	 monitorar.loadClip(receber['caminho_imagem' + contar],alvo_mc);
 }
 // Carregamos a página php com a sua lista de dados.
 var receber:LoadVars = new LoadVars(); // Receberá os dados solicitados 
 receber.onLoad = function($sucesso){
	 if($sucesso == true){
		 // Junto a sua lista coloque uma variável total para saber quantos elementos existem.
		 this.total = Number(this.total);
		 if(this.total > 0 && !isNaN(this.total)){
			 // Existem arquivos listados
			 contar = 1; // recomeçar a contagem
			 // Agora carregamos a primeira imagem.
			 carregarImagem();
		 }else{
			 // Não existem arquivos listados
		 }
		 // Os dados foram recebidos com sucesso
	 }else{
		 // Ocorreu algum erro ao receber os dados
	 }
 }
 var solicira:LoadVars = new LoadVars(); // Fará a solicitação da página
 solicira.sendAndLoad("http://localhost/tv/retorno.php",receber);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eai Foxn...

 

bem cara.. vi que o seu codigo é mais "profissional" que o meu hehe. mais tem um problema ele não funcionou.. não carregou imagem nenhuma.. nem um Trace funcionou.. mexi mexi mexi nele e nada..

 

eu como jah estava atras do codigo.. pra isso fui pensando um pouco.. pode não ter ficado profissional.. e ter caido em desuso.. maassss funcionou hehe..

da uma conferida.

 

indice = 0;
primeiro = 0;

var retorno:LoadVars = new LoadVars();
retorno.load("http://localhost/tv/retorno.php");

retorno.onLoad = MostraSwf();
function randomiza(){
	retorno.load("http://localhost/tv/retorno.php");
	
	if(indice >= 0){
	indice++;
	}
	
	if(indice == 4){
		indice = 0;
	}
	return indice;
}

function MostraSwf(){
	i = randomiza();
	
	if(i == undefined){
		i = 0;
	}
	
	if (i == 0) {
		trace('i é igual a ' + i);
		loadMovie(retorno['caminho_imagem' + i], "alvo_mc");
		clearInterval(vai);
		vai = setInterval(MostraSwf, 5000);
	} else if (i == 1) {
		trace('i é igual a ' + i);
		loadMovie(retorno['caminho_imagem' + i], "alvo_mc");
		clearInterval(vai);
		vai = setInterval(MostraSwf, 5000);
	} else if (i == 2) {
		trace('i é igual a ' + i);
		loadMovie(retorno['caminho_imagem' + i], "alvo_mc");
		clearInterval(vai);
		vai = setInterval(MostraSwf, 5000);
	} else if (i == 3) {
		trace('i é igual a ' + i);
		loadMovie(retorno['caminho_imagem' + i], "alvo_mc");
		clearInterval(vai);
		vai = setInterval(MostraSwf, 5000);
	}
}

so tem um probleminha.. na primeira vez que eu rodo ele.. ele não aparecei magem nenhuma.. ai da os 3 segundos e aparece a segunda.. meu output ta assim

 

i é igual a 1
Error opening URL 'file:///C|/wamp/www/TV/flash/undefined'
i é igual a 2
i é igual a 3
i é igual a 0
i é igual a 1
i é igual a 2

e assim vai..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Código proficional não importa... o que importa é chegar ao objetivo com o desempenho desejado.

 

Primeiro em parte você tem razão, não que ele não carregue a imagem, mas sim que ele carrega apenas a primeira imagem.

Nesta função:

 

var carregarImagem:Function = function(){
		  // Paramos o setinterval para esperar que a imagem seja carregada
		  clearInterval(intervalo);
		  // Se contar for maior que o total, vamos recomeçar a contagem
		  if(contar > receber.total){
			  contar = 1;
		  }
		  monitorar.loadClip(receber['caminho_imagem' + contar],alvo_mc);
	 }

Eu esqueci de colocar um contar++ no fim da linha:

 

var carregarImagem:Function = function(){
		  // Paramos o setinterval para esperar que a imagem seja carregada
		  clearInterval(intervalo);
		  // Se contar for maior que o total, vamos recomeçar a contagem
		  if(contar > receber.total){
			  contar = 1;
		  }
		  monitorar.loadClip(receber['caminho_imagem' + contar],alvo_mc);
		  contar ++;
	 }

Segue um link com o exemplo funcionando:exemplo

 

Segundo, quando eu digo desuso, não é por que esta errado e que o outro jeito é mais bonitinho, e sim por que as versôes mais novas do Flash aceita estes comando, são considerados erros e o script não continua se não for corrigido.

 

Por fim, tire o load de dentro do randomiza e tire os parentesese quando for iqualar o onLoad e o MostraSwf

 

indice = 0;
   primeiro = 0;
   var retorno:LoadVars = new LoadVars();
   retorno.load("http://localhost/tv/retorno.php");
   retorno.onLoad = MostraSwf;
   function randomiza() {
	   if (indice>=0) {
		   indice++;
	   }
	   if (indice == 4) {
		   indice = 0;
	   }
	   return indice;
   }
   function MostraSwf() {
	   i = randomiza();
	   if (i == undefined) {
		   i = 0;
	   }
	   if (i == 0) {
		   trace('i é igual a '+i);
		   loadMovie(retorno['caminho_imagem'+i], "alvo_mc");
		   clearInterval(vai);
		   vai = setInterval(MostraSwf, 5000);
	   } else if (i == 1) {
		   trace('i é igual a '+i);
		   loadMovie(retorno['caminho_imagem'+i], "alvo_mc");
		   clearInterval(vai);
		   vai = setInterval(MostraSwf, 5000);
	   } else if (i == 2) {
		   trace('i é igual a '+i);
		   loadMovie(retorno['caminho_imagem'+i], "alvo_mc");
		   clearInterval(vai);
		   vai = setInterval(MostraSwf, 5000);
	   } else if (i == 3) {
		   trace('i é igual a '+i);
		   loadMovie(retorno['caminho_imagem'+i], "alvo_mc");
		   clearInterval(vai);
		   vai = setInterval(MostraSwf, 5000);
	   }
   }

Pronto está funcionando, mas como o carneirinho disse, quando colocar na web pode ser que você enfrente problemas de carregamento de imagens.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hehe.. pois é..

 

vlw pela ajuda.. vou testar o codigo..

 

ahh em relação ao que o carneirinho disse.. não esquento muito não.. pq não vai pra web.. isso vai ser um sistema de propaganda que vai rodar numa televisão... ele vai pegar dados do banco de dados do sistema em delphi qeu temos na loja.. (retorno.php)... e exibilos.. na tv atravez do flash.. por causa das animações...

 

fica digamos assim.. mais "agradavel" ver as letrinhas mexendo.. cores.. movimento.. o cliente gosta disso né..( alem de eu aprender um pouco mais de flash., hehe..)

 

falando nisso.. eu tava querendo fazer essas animações.. como eu procuro isso no google? (+smooth +transition +flash)... como é... tipo assim..queria fazer a foto que vai ser carregada começar pequena e ficar no tamanho normal dela.. os textos dinamicos qeu eu vou colcoar da virem de um lado e outro.. acho que isso eu não posso fazer na timeline nao ne? pq lah fica ruim pra caramba... meio travado.. não é aquela animação que vai "suavemente".... mais vou procurar no google agora mesmo..

 

mais de qualquer forma.... VVVLLLLWWWWW Foxn...

 

flw

 

ps: se eu não conseguir colocar o codigo..eu volto a postar.. ok?! abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eai pessoal... beleza?

 

caramba.. fui mostrar pro meu chefe o .swf.. e achamos um problema um tanto grave1!! assim.. eu mudei o codigo pra poder pegar o total de registros que tem no banco de dados.. e mostrar uma por uma..

 

indice = 0; //definição do loop
primeiro = 0; //primeira vez do loop

var retorno:LoadVars = new LoadVars();

var solicira:LoadVars = new LoadVars(); // Fará a solicitação da página
solicira.sendAndLoad("http://localhost/tv/retorno.php",retorno);

retorno.onLoad = MostraSwf;

//##### EXIBIR AS FOTOS E IMAGENS	
function MostraSwf(){
	total = retorno['nLoop']; // total de registros no banco de dados
	i = randomiza(total);
	trace(total);
	 loadMovie(retorno['caminho_imagem' + i], "alvo_mc");
	 clearInterval(vai);
	 vai = setInterval(MostraSwf, 5000);
}

// ########## Randomizandooooo ###########
function randomiza(numMax){
	indice++; // Loop + 1
	
	if (primeiro == 0){
		primeiro = 1;
		indice = 0;
	}
	if(indice == numMax){
		indice = 0;
	}
		return indice; // Retorno do valor a ser exibido pela Recebe swf
}

beleza.. funciona tranquilo. lindo d+++++

 

porem.. se eu for no banco de dados e adicionar ou retirar um registro.. ai da zinca... ele nao da um "reload" pra saber se saiu ou inseriu alguma coisa... o que é muito importante num sistema de propagandas né?

 

e como eu queria fazer algo bom.. não qeuria que o cliente fosse lah e desse um reload na pagina que ta o flash.. ridiculo isso.. não é verdade? tem qeu ser automatico..

 

agora.. em qualquer lugar do codigo que eu coloco a expressão:

 

solicira.sendAndLoad("http://localhost/tv/retorno.php",retorno);

que e aonde ele le o meu php de resposta.. o loop fica doidão.. alem de não ler.. fica contando muuiito rapido.. como eu faço pra que no meio do meu interval... ele leia o php.. de continuidade nos registros mostrados(sem começar do 0 denovo.. se nao der pode ser assim mesmo)... e atualize o a variavel numMax.. hehe..

 

brigadão!

Compartilhar este post


Link para o post
Compartilhar em outros sites

indice = 0; //definição do loop

primeiro = 0; //primeira vez do loop

 

var retorno:LoadVars = new LoadVars();

var solicita:LoadVars = new LoadVars(); // Fará a solicitação da página

 

//##### EXIBIR AS FOTOS E IMAGENS

function MostraSwf(){

total = retorno['nLoop']; // total de registros no banco de dados

i = randomiza(total);

trace(total);

loadMovie(retorno['caminho_imagem' + i], "alvo_mc");

vai = setInterval(ChamarDados, 5000);

}

 

// ########## Randomizandooooo ###########

function randomiza(numMax){

indice++; // Loop + 1

 

if (primeiro == 0){

primeiro = 1;

indice = 0;

}

if(indice == numMax){

indice = 0;

}

return indice; // Retorno do valor a ser exibido pela Recebe swf

}

 

function ChamarDados(){

clearInterval(vai);

retorno = new LoadVars();

retorno.onLoad = MostraSwf;

solicita.sendAndLoad("http://localhost/tv/retorno.php",retorno);

}

 

ChamarDados();

Compartilhar este post


Link para o post
Compartilhar em outros sites

AHHHHH MULEQUEEE... ou como é bom ver funcionando eim! hehe.. deu direitinho mto bom mesmo.. mto bom..

 

vlw Foxn, carneirinho.. brigadão a todos.. Topico [RESOLVIDO].. (se tiver mais abro outro post.. jah que não via ter a ver com essa parte.. ok?!

 

Abração a todos

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.