Raphael M. 0 Denunciar post Postado Setembro 21, 2010 Olá a todos do IMaster. Estou com uma grande dificuldade em uma programação Action Script 2.0. Trate-se de uma galeria de fotos que lê um arquivo XML gerado dinâmicamente por um PHP. Não estou conseguindo fazer o Flash exibir as imagens listadas no XML. Alguém pode me ajudar? Vou postar os códigos aqui: Código XML <?xml version="1.0"?> <galeria> <fotos ="fotos01/imagem01.jpg"/> <fotos ="fotos01/imagem02.jpg"/> <fotos ="fotos01/imagem03.jpg"/> </galeria> Código Action Script 2.0 /* Galeria de Fotos */ var meuXML:XML = new XML(); meuXML.ignoreWhite = true; meuXML.onLoad = function():Void{ for(i=0;i<meuXML.childNodes[0].childNodes.length;i++){ /*aqui há um Movie Clip no palco que deveria ler as imagens*/ var barra_mc:MovieClipLoader = new MovieClipLoader(); barra_mc.loadClip(meuXML.childNodes[0].attributes.local); trace(meuXML.firstChild.childNodes[0].attributes.local); } }; meuXML.load("galeria.xml"); //////////////////////////////////////////////////////// /*Aqui há dois botões no palco com a função de ir e vir pelas imagens da galeria*/ /* Botão avançar (proximo_bt) */ proximo_bt.onRelease =function(){ if(i==imagensTotal-1){ i=0; }else{ i++; }; carregaImagens(); }; /* Botão voltar (anterior_bt) */ anterior_bt.onRelease =function(){ if(i==0){ i=imagensTotal-1; }else{ i--; }; carregaImagens(); }; Desde já muito obrigado. Valeu! Abraços a todos Raphael Compartilhar este post Link para o post Compartilhar em outros sites
Thiago de Oliveira Cruz 21 Denunciar post Postado Setembro 21, 2010 Seu XML ta errado. <fotos local="fotos01/imagem01.jpg"/> <fotos local="fotos01/imagem02.jpg"/> <fotos local="fotos01/imagem03.jpg"/> Seria o correto Abraços Compartilhar este post Link para o post Compartilhar em outros sites
Raphael M. 0 Denunciar post Postado Setembro 22, 2010 Olá meu amigo! Sua dica já me deu uma luz aqui. No entanto, fazendo a alteração que você me passou, na hora de testar o Action Script ele dá a seguinte informação de output: fotos01/imagem01.jpg fotos01/imagem01.jpg fotos01/imagem01.jpg É como se o AS não conseguisse ler o XML. Você tem alguma dica para me ajudar? Desde já muito obrigado. Raphael Compartilhar este post Link para o post Compartilhar em outros sites
Thiago de Oliveira Cruz 21 Denunciar post Postado Setembro 22, 2010 Bom agora que você acertou o XML vamos ao erro do AS Aqui: var barra_mc:MovieClipLoader = new MovieClipLoader(); barra_mc.loadClip(meuXML.childNodes[0].attributes.local); trace(meuXML.firstChild.childNodes[0].attributes.local); Você tem 2 coisas Trace só vai mostrar no output o nome da imagem E barra_mc como é uma classe MovieClipLoader para você carregar um clip você tem que passar 2 parametros O primeiro o lugar do qual ele vai carregar o que você quer e o segundo é o MovieClip que você vai carrega o conteúdo desejado Então vamos a um exemplo: var mc:MovieClip = _root.createEmptyMovieClip("mc", 1); var mcl:MovieClipLoader = new MovieClipLoader(); mcl.loadClip("http://forum.imasters.com.br/random_logos/logo2.png", mc); Com isso ele vai carregar o logo do forum no MovieClip MC setado por mim. Então você tem de fazer algo do genero... para poder colocar sua imagem na tela. Não faça copy paste e ache que vai resolver seu problema. Isso é um exemplo que vai funcionar 100% num novo arquivo, não necessáriamente no seu. Abraços Compartilhar este post Link para o post Compartilhar em outros sites
Raphael M. 0 Denunciar post Postado Setembro 29, 2010 Amigos, Depois de muita luta (já devem ter percebido que eu sou iniciante em Flash) consegui configurar o código para ler o XML. Ocorre agora que não estou conseguindo fazer o loop entre as fotos, digo, quero que, quando a galeria chegar na última foto, volte para a primeira e, quando estivermos na primeira foto e clicarmos para recuar, vá para a última. Como estamos trabalhando com um XML dinâmico, os botões devem obedecer uma varável de acordo com a quantidade de fotos existente no Banco de Dados naquele momento. Vou postar o código AS 2.0. Ele está puxando as fotos numa boa, só não consigo esse loop var i:Number = 0; /* Galeria de Fotos */ var meuXML:XML = new XML(); meuXML.ignoreWhite = true; meuXML.onLoad = function():Void{ for(i=0;i<meuXML.childNodes[i].childNodes.length;i++){ var galeria_mc:MovieClip = _root.createEmptyMovieClip("galeria_mc", 1); var galeria_mcl:MovieClipLoader = new MovieClipLoader(); imagensTotal = this.firstChild.childNodes[1].childNodes.length; carregaImagens(); } }; meuXML.load("galeria.xml"); function carregaImagens(){ galeria_mc.loadMovie(meuXML.firstChild.childNodes[i].attributes.local); barra_mc.onEnterFrame = function(){ if (this.target) return (0); var loaded = target.getBytesLoaded(); var total = target.getBytesTotal(); var scale = 0; if (loaded && total){ var percent = loaded/total; scale = 100 * percent; }; this._xscale = scale; }; barra_mc.target = meuXML; }; //////////////////////////////////////////////////////// /* Botão avançar (proximo_bt) */ proximo_bt.onRelease =function(){ if(i==imagensTotal-1){ i=0; }else{ i++; }; carregaImagens(); }; /* Botão voltar (anterior_bt) */ anterior_bt.onRelease =function(){ if(i==0){ i=imagensTotal-1; }else{ i--; }; carregaImagens(); }; Compartilhar este post Link para o post Compartilhar em outros sites
Thiago de Oliveira Cruz 21 Denunciar post Postado Setembro 29, 2010 Então a regra é simples Quando atingir o maximo + 1 ele zera o contador e carrega Quanto atingir o minimo - 1 ou seja -1 coloca o contador no maximo de entradas Se não tiver nem uma nem outra, no proximo você adiciona 1 ao contador e no anterior remove 1 Abraços Compartilhar este post Link para o post Compartilhar em outros sites
Raphael M. 0 Denunciar post Postado Setembro 29, 2010 Amigo, desculpe, mas não entendi ao certo. O Código que postei, retirando a parte dos botões, está correto? Teria como, por favor, exemplificar com base no código que eu postei (ou outro qualquer), essa lógica para eu poder entender melhor? Desde já meu obrigado imenso Abraços Compartilhar este post Link para o post Compartilhar em outros sites
Thiago de Oliveira Cruz 21 Denunciar post Postado Setembro 30, 2010 var i = 0; var total = 10; function abreFoto(){ trace(i); } proxima.onPress = function(){ if(i == total){ i = 0 }else { i++; } abreFoto(); } anterior.onPress = function(){ if(i == 0){ i = total }else { i--; } abreFoto(); } Abraços Compartilhar este post Link para o post Compartilhar em outros sites
Raphael M. 0 Denunciar post Postado Outubro 1, 2010 Então, muito obrigado pela ajuda. Mas no caso aqui a "var total =10" me defini quantas fotos eu posso "puxar" na galeria. Ocorre que o XML é dinâmico, ele varia de acordo com o número de arquivos existentes no banco de dados em um momento específico... Desta forma como está eu não ficaria restrito a um número de fotos (no caso 10)? E se eu quiser subir mais fotos? Gostaria de uma solução que lê-se as fotos de acordo com a XML gerado naquele momento. Valeu! Abraços Raphael M. Compartilhar este post Link para o post Compartilhar em outros sites
Thiago de Oliveira Cruz 21 Denunciar post Postado Outubro 1, 2010 Pegue o valor do length dos nós do XML que você deseja e utilize no lugar do total Abraços Compartilhar este post Link para o post Compartilhar em outros sites
Raphael M. 0 Denunciar post Postado Outubro 2, 2010 Amigo, me desculpe, mas aqui não está dando certo não. Se você exemplificar ficaria muito mais fácil. A outra etapa que resolvemos você exemplificou e deu muito certo. Desculpe, mas seu iniciante em Flash. Abraços Compartilhar este post Link para o post Compartilhar em outros sites
Thiago de Oliveira Cruz 21 Denunciar post Postado Outubro 2, 2010 Então ai vai o exemplo: var total = 0; var count = 0; meuXML.onload = function():Void { total = meuXML.childNodes[i].childNodes.length for(i=0;i< total ;i++){ } } function abreFoto() { trace(count); } proxima.onPress = function(){ if(count == total){ count = 0 }else { count ++; } abreFoto(); } anterior.onPress = function(){ if(count == 0){ count = total }else { count --; } abreFoto(); } O ponto que tenho a dizer é que se você não tentar... não ler o código que ta ai e tentar refazer você nunca vai aprender. Ninguem nasce sabendo... mas se tbm não tentar não aprende Abraços Compartilhar este post Link para o post Compartilhar em outros sites
Raphael M. 0 Denunciar post Postado Outubro 3, 2010 Então, legal, consegui entender um pouco mais. Mas agora o código (que tentei montar) está exibindo a primeira foto, vai pra segunda quando acionado o botão "próximo" mas fica prezo ali, não avança para as demais fotos nem retrocede... vou postar o código atualizado aqui. Peço, por favor, que você me comente em cima desse código.. fica muito mais fácil entender. Meu tempo infelizmente é curto e meu prazo está acabando, preciso desse código funcionando. Obrigado. var i:Number=0; var total=0; var count=0; /* Galeria de Fotos */ var meuXML:XML = new XML(); meuXML.ignoreWhite = true; meuXML.onLoad = function():Void { for (i=0; i<meuXML.childNodes[i].childNodes.length; i++) { var galeria_mc:MovieClip = _root.createEmptyMovieClip("galeria_mc", 1); var galeria_mcl:MovieClipLoader = new MovieClipLoader(); total = meuXML.firstChild.childNodes[i].childNodes.length; carregaImagens(); for(i=0;i<total;i++){ } } }; meuXML.load("galeria.xml"); function carregaImagens() { trace(count); galeria_mc.loadMovie(meuXML.firstChild.childNodes[i].attributes.local); barra_mc.onEnterFrame = function() { if (this.target) { return (0); } var loaded = target.getBytesLoaded(); var total = target.getBytesTotal(); var scale = 0; if (loaded && total) { var percent = loaded/total; scale = 100*percent; } this._xscale = scale; }; barra_mc.target = meuXML; } //////////////////////////////////////////////////////// /* Botão avançar (proximo_bt) */ proximo_bt.onRelease = function() { if (count == total) { count = 0; } else { count++; } carregaImagens(); }; /* Botão voltar (anterior_bt) */ anterior_bt.onRelease = function() { if (count == 0) { count = total; } else { count--; } carregaImagens(); }; Compartilhar este post Link para o post Compartilhar em outros sites
Raphael M. 0 Denunciar post Postado Outubro 4, 2010 Amigo, consegui fazer o loop! O código mais correto seria esse: /* Galeria de Fotos */ var meuXML:XML = new XML(); meuXML.ignoreWhite = true; meuXML.onLoad = function():Void { var galeria_mc:MovieClip = _root.createEmptyMovieClip("galeria_mc", 1); var galeria_mc1:MovieClipLoader = new MovieClipLoader(); total = this.childNodes[i].childNodes.length; for(i=0; i<total; i++); carregaImagens; }; meuXML.load("galeria.xml"); function carregaImagens() { galeria_mc.loadMovie(meuXML.firstChild.childNodes[i].attributes.local); trace(meuXML.firstChild.childNodes[i].attributes.local); }; //////////////////////////////////////////////////////// /* Botão avançar (proximo_bt) */ proximo_bt.onRelease = function() { if (i == total) { i = 0; } else { i++; } carregaImagens(); }; /* Botão voltar (anterior_bt) */ anterior_bt.onRelease = function() { if (i == 0) { i = total; } else { i--; } carregaImagens(); }; Tem apenas um único detalhe. Quando publico a galeria, o código não "puxa" a primeira foto (nó 0 do XML). Apenas depois que começo a acionar os botões de próximo e anterior que a sequencia de fotos é apresentada. O loop é feito, mas fica um "espaço" entre uma sequencia e outra. A tela de output dá erro, arquivo indefinido, embora mostre todos os demais arquivos. Alguém pode me ajudar!? Acredito que esteja faltando um único detalhe que não estou vendo. Muito obrigado abraços Raphael M. Compartilhar este post Link para o post Compartilhar em outros sites
Thiago de Oliveira Cruz 21 Denunciar post Postado Outubro 4, 2010 Para iniciar você tem que fazer Faça assim: meuXML.onload = function():Void { var galeria_mc:MovieClip = _root.createEmptyMovieClip("galeria_mc", 1); var galeria_mc1:MovieClipLoader = new MovieClipLoader(); total = this.childNodes[i].childNodes.length; carregaImagens(); } Então, legal, consegui entender um pouco mais. Mas agora o código (que tentei montar) está exibindo a primeira foto, vai pra segunda quando acionado o botão "próximo" mas fica prezo ali, não avança para as demais fotos nem retrocede... vou postar o código atualizado aqui. Peço, por favor, que você me comente em cima desse código.. fica muito mais fácil entender. Meu tempo infelizmente é curto e meu prazo está acabando, preciso desse código funcionando. Obrigado. Vou lhe lembrar que esse forum aqui não é de help desk... apenas de ajuda e para aprendizagem, ninguem ganha nada aqui ajudando as pessoas ok? As pessoas respondem quando podem ou tem disponibilidade... Abraços Compartilhar este post Link para o post Compartilhar em outros sites