.Ingrid. 0 Denunciar post Postado Maio 3, 2010 Olá pessoal, Estou com um problema num banner em que tenho 4 relógios flash analógicos com 4 fusos diferentes. No AS ele chama um arquivo ASP e "imprime" a hora. O problema que tenho é que ele está chamando o arquivo ASP constantemente, e preciso que ele chame apenas uma vez o arquivo e continue rodando os ponteiros pelo flash mesmo. Segue abaixo o AS do frame inicial: var counter=29; var loader = new LoadVars(); loader.onLoad = function(success) { if(success) { // read your data here, e.g. _root.hora = this.hora; // suppose the server send back a variable x trace(_root.hora); } } this.onEnterFrame = function(){ if(counter > 30){ var sender = new LoadVars(); sender.sendAndLoad("getdate.aspx", loader, "GET"); counter = 0 ; } counter ++; } e esse é o AS com os fusos: stop(); relogio1.fsAtual = -3; relogio2.fsAtual = +6; relogio3.fsAtual = 4; relogio4.fsAtual = 8; /////RELOGIO 1 r1.alphaTo(100,0.5,"linear"); r1.scaleTo(100,1.5,"easeoutElastic",0.1); brasil.alphaTo(100,0.5,"linear",0.5); relogio1.alphaTo(100,0.5,"linear",0.5); /////RELOGIO 2 r2.alphaTo(100,0.5,"linear",0.5); r2.scaleTo(100,1.5,"easeoutElastic",0.6); india.alphaTo(100,1.5,"linear",1.1); relogio2.alphaTo(100,0.5,"linear",1.7); /////RELOGIO 3 r3.alphaTo(100,0.5,"linear",1); r3.scaleTo(100,1.5,"easeoutElastic",1.1); relogio3.alphaTo(100,1.5,"linear",1.1); russia.alphaTo(100,0.5,"linear",1.7,function ():Void { this._parent._parent.mcTextos.gotoAndPlay(2); }); /////RELOGIO 4 r4.alphaTo(100,0.5,"linear",1.5); r4.scaleTo(100,1.5,"easeoutElastic",1.6); china.alphaTo(100,1.5,"linear",2.1); relogio4.alphaTo(100,1.5,"linear",2.1); linha.alphaTo(100,0.5,"linear",2.1); e esse é o cod que faz os ponteiros girarem: stop(); var counter = 28; var time = 0; var totTime = 0; this.onEnterFrame = function(){ if(counter >= 30){ var arr:Array = _root.hora.split(":"); seconds = Number(arr[2]); minutes = Number(arr[1]); hours = Number(arr[0]); hours = hours + (minutes/60); hours = hours +7; //minutes = minutes +30 seconds = seconds*6; // calculating seconds minutes = minutes*6; // calculating minutes hours = hours*30; // calculating hours sec._rotation=seconds; // giving rotation property min._rotation=minutes; // giving rotation property hour._rotation=hours; // giving rotation property counter = 0; time++; } counter++; } Alguém me ajuda plzzz? Preciso que não chame o arquivo "getDate.aspx" o tempo... =) Compartilhar este post Link para o post Compartilhar em outros sites
Public2004 79 Denunciar post Postado Maio 4, 2010 Olá .Ingrid. e seja bem vindo ao fórum. Quanto a sua dúvida, se quer que carregue o arquivo .asp apenas uma vez, tire a chamada do mesmo do "onEnterFrame" (que é uma espécie de "loop" finalizado de acordo com alguma condição). Se é realmente isso que eu entendi, aquele "onEnterFrame" é desnecessário... Att. Compartilhar este post Link para o post Compartilhar em outros sites
.Ingrid. 0 Denunciar post Postado Maio 4, 2010 Obrigada pela ajuda! mas como farei isso? Compartilhar este post Link para o post Compartilhar em outros sites
Public2004 79 Denunciar post Postado Maio 4, 2010 Veja que minha sugestão é dentro do que entendi e posso estar errado... Onde: var counter = 29; var loader = new LoadVars(); loader.onload = function(success) { if (success) { // read your data here, e.g. _root.hora = this.hora; // suppose the server send back a variable x trace(_root.hora); } }; this.onEnterFrame = function() { if (counter>30) { var sender = new LoadVars(); sender.sendAndLoad("getdate.aspx", loader, "GET"); counter = 0; } counter++; }; Altere para: var loader = new LoadVars(); loader.onLoad = function(success) { if (success) { // read your data here, e.g. _root.hora = this.hora; // suppose the server send back a variable x trace(_root.hora); } }; loader.load("getdate.aspx"); Att. Compartilhar este post Link para o post Compartilhar em outros sites
.Ingrid. 0 Denunciar post Postado Maio 4, 2010 é, tentei mas nõ deu certo =/ Compartilhar este post Link para o post Compartilhar em outros sites
Public2004 79 Denunciar post Postado Maio 4, 2010 O que exatamente não deu certo? Apresentou algum erro? Compartilhar este post Link para o post Compartilhar em outros sites
.Ingrid. 0 Denunciar post Postado Maio 4, 2010 ele não deu nenhum erro. Porém não rodaram os ponteiros... ele realmente fez apenas uma solicitação do arquivo "getdate.aspx" porém parece que ignorou os comandos de girar os ponteiros. Compartilhar este post Link para o post Compartilhar em outros sites
Public2004 79 Denunciar post Postado Maio 4, 2010 Fiquei meio confuso agora... Neste caso então a animação dos relógios dependem diretamente do arquivo externo aspx, que deve ter apenas o retorno da hora atual do servidor. Se for isso terá que utilizar como antes mesmo... Att. Compartilhar este post Link para o post Compartilhar em outros sites
.Ingrid. 0 Denunciar post Postado Maio 4, 2010 então, na verdade não... pois no arquivo aspx só imprime a data <% Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1)) Response.Cache.SetCacheability(HttpCacheability.NoCache) Response.Cache.SetNoStore() %> &hora=<%=DateTime.Now().ToString("HH:mm:ss")%> Compartilhar este post Link para o post Compartilhar em outros sites
Public2004 79 Denunciar post Postado Maio 4, 2010 Mas é isso mesmo, os ponteiros do relógio se movimentam de acordo com o retorno do aspx, que deve ser feita constantemente, caso contrário não haverá animação pois a variável ficará estática, para perceber isso basta reparar no seu cód. no terceiro bloco que postou inicialmente, nele contém um outro "onEnterFrame" que faz a leitura da variável em loop, explicando a cada leitura haverá um valor diferente de hora, isto que faz movimentar os ponteiros dos seus relógios... Att. Compartilhar este post Link para o post Compartilhar em outros sites
.Ingrid. 0 Denunciar post Postado Maio 4, 2010 sim, agora acredito que deu pra você ver tudo o que acontece. eu queria encontrar um jeito, sem ter que refazer tudo para que os ponteiros pegassem a hora uma vez apenas e rodassem sozinhos depois, e tirando o onEnterFrame acho que não dá? Compartilhar este post Link para o post Compartilhar em outros sites
Matheus Brito 12 Denunciar post Postado Maio 5, 2010 Se voce remover o onEnterFrame da parte onde retorna o valor da hora, não resolveria? Voce carrega uma vez e depois que carregou você finaliza deixa a variavel com um escopo global e utiliza ela no onEnterFrame dos ponteiros. ABs Compartilhar este post Link para o post Compartilhar em outros sites
.Ingrid. 0 Denunciar post Postado Maio 5, 2010 é exatamente isso que estou tentando fazer e não conseguí. sabe algum jeito diferente do que ja tentamos aqui? Obrigada =) Compartilhar este post Link para o post Compartilhar em outros sites
Thiago de Oliveira Cruz 21 Denunciar post Postado Maio 5, 2010 Solução simples para o seu problema :) Crie um date var date:Date = new Date(); Para que você vai fazer isso??? O que faz funcionar um relogio??? Os segundos :) Se você ta trabalhando com um arquivo que fica puxando o tempo todo um arquivo aspx eh pq ele ta procurando tbm pelos segundos... então como você vai ter um tempo parado em relação aos outros o que você vai precisar eh adicionar os segundos... Veja um exemplo de como eu fiz... para buscar 1 relogio com php: var received = _root.dateinfo; var startTime = _root.startTime; //var received = "2010-12-27 23:20:00"; //var startTime = "2010-12-12 23:19:10"; var d:Array = new Array(); var h:Array = new Array(); var st:Array = new Array(); var dt:Array = new Array(); var arr:Array = new Array(); var arr2:Array = new Array(); arr = received.split(" "); d = arr[0].split('-'); h = arr[1].split(':'); arr2 = startTime.split(" "); dt = arr2[0].split('-'); st = arr2[1].split(':'); for(i = 0; i < d.length; i++){ d[i] = parseInt(d[i]); h[i] = parseInt(h[i]); st[i] = parseInt(st[i]); dt[i] = parseInt(dt[i]); } var time = setInterval (getTime, 1000); var days = 0; var hours = 0; var minutes = 0; var seconds = 0; var xfinal = 0; function getTime(){ var date:Date = new Date(); if(date.getSeconds() == 0){ st[1]=st[1]+1; } var fdate = Date.UTC(d[0],d[1],d[2],h[0],h[1],h[2]); var today = Date.UTC(dt[0],dt[1],dt[2],st[0],st[1],date.getSeconds()); xfinal = fdate - today; xfinal = xfinal/1000; if(xfinal < 0){ trace("00-00-00 00:00:00"); }else { if(xfinal>86400) { days = Math.floor(xfinal/86400); xfinal = xfinal-(days*86400); //days = days/1000; }else { days = 0; } if(xfinal>3600) { hours = Math.floor(xfinal/3600); xfinal = xfinal-(hours*3600); }else { hours =0; } if(xfinal>60) { minutes = Math.floor(xfinal/60); xfinal = xfinal-(minutes*60); seconds = xfinal; }else { minutes = 0; seconds = xfinal; } if(days < 0){ day.text = '0'+0; hr.text = '0'+0; min.text = '0'+0; sec.text = '0'+0; delete clearInterval(time); }else { if(days < 10){ day.text = '0'+days; }else { day.text = days; } if(hours < 10){ hr.text = '0'+hours; }else { hr.text = hours; } if(minutes < 10){ min.text = '0'+minutes; }else { min.text = minutes; } if(seconds < 10){ sec.text = '0'+seconds; }else { sec.text = seconds; } } } } getTime(); No meu caso o codigo eh um cadin grande... Aqui: var received = _root.dateinfo; var startTime = _root.startTime; Eu to recebendo as variaveis que foram imprimidas no flashvars... você pode usar um loadVars e carregar o arquivo asp para carregar essas variaveis... ai depende de você Como você pode ver minha data foi criada com - e a hora com : Isso ai eh um contador de hora universal... ele vai sempre imprimir os dias que faltam, horas, minutos e segundos. você vai ter que alterar para o que você quer... mas como você pode ver o principio do meu codigo eh exatamente isso que você quer... partir de uma hora travada... e subir os segundos fazendo com que o serviço funcione perfeitamente. Abraços Compartilhar este post Link para o post Compartilhar em outros sites
.Ingrid. 0 Denunciar post Postado Maio 6, 2010 Hum, acabou que conseguí resolver meu problema. Depois vou testar a sua sugestão. Mas para quem tenha interesse, vou postar aqui a solução que encontrei: #include "mc_tween2.as" stop(); var loader = new LoadVars(); var roothora = ""; var nossadata:Date = new Date(); var counter = 0; loader.onLoad = function(success) { if(success) { // read your data here, e.g. _root.hora = this.hora; // suppose the server send back a variable x //trace(this.hora); //18:23:33 var hours = substring(this.hora,0,2); var minutes = substring(this.hora,4,2); var seconds = substring(this.hora,7,2); //trace(hours + ' ' + minutes + ' ' + seconds); nossadata.setHours(hours); nossadata.setMinutes(minutes); nossadata.setSeconds(seconds); } } var sender = new LoadVars(); sender.sendAndLoad("getdate.aspx", loader, "GET"); this.onEnterFrame = function(){ if (counter > 30) { timestamp = nossadata.setTime(nossadata.getTime()+1000); stringhora = nossadata.getHours()+":"+nossadata.getMinutes()+":"+nossadata.getSeconds(); _root.hora = stringhora; trace(counter + " >> " + _root.hora); counter = 0; } counter++; } Obrigada a todos que tentaram me ajudar aqui =) Compartilhar este post Link para o post Compartilhar em outros sites
Thiago de Oliveira Cruz 21 Denunciar post Postado Maio 6, 2010 A minha ideia eh +/- parecida com a sua rs :) Soh que o meu tem outro proposito por isso o código eh um cadinho maior hehe Mas que bom que resolveu :) E obrigado por colaborar com a resolução Abraços Compartilhar este post Link para o post Compartilhar em outros sites
Public2004 79 Denunciar post Postado Maio 7, 2010 .Ingrid. só uma observação! No seu exemplo, o fps do seu filme deverá estar sincronizado com o contador, caso contrário o relógio não funcionará corretamente, para contornar esse eventual problema seria mais interessante trabalhar com o "setInterval" do que com o "onEnterFrame". Att. Compartilhar este post Link para o post Compartilhar em outros sites