Godoi 0 Denunciar post Postado Julho 7, 2008 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
carneirinho 7 Denunciar post Postado Julho 7, 2008 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
Godoi 0 Denunciar post Postado Julho 8, 2008 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
Foxn 3 Denunciar post Postado Julho 8, 2008 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
Godoi 0 Denunciar post Postado Julho 8, 2008 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
Foxn 3 Denunciar post Postado Julho 9, 2008 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
Godoi 0 Denunciar post Postado Julho 9, 2008 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
Godoi 0 Denunciar post Postado Julho 10, 2008 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
Foxn 3 Denunciar post Postado Julho 10, 2008 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
Godoi 0 Denunciar post Postado Julho 11, 2008 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