d3rson 0 Denunciar post Postado Junho 8, 2011 Pssoal... tenho o seguinte script: var dados:XML = new XML(); dados.ignoreWhite = true; dados.load("xml/15anos.xml");// + _root.xmlport dados.onLoad = function():Void { qtd = this.childNodes[0].childNodes.length; _root.qualqtd = this.childNodes[0].childNodes.length; for (j = 0; j <= qtd; j++) { mcPanels.item_mc.duplicateMovieClip("item_mc" + j,mcPanels.getNextHighestDepth()); mcPanels["item_mc" + j].imagem = this.childNodes[0].childNodes[j].childNodes[0].attributes.imagem; mcPanels["item_mc" + j].tamanho = this.childNodes[0].childNodes[j].childNodes[1].attributes.tamanhofoto; mcPanels["item_mc" + j].foto.loadMovie(mcPanels["item_mc" + j].imagem); mcPanels["item_mc" + j]._x = j * mcPanels["item_mc" + j].tamanho; mcPanels["item_mc" + j]._y = 0; }//FIM FOR };//FIM DADOS LOAD o que acontece é que cada imagem que vou carregar do XML é de uma largura diferente, e gostaria de posicioná-las exatamente uma ao lado da outra... Se todas as imagens forem do mesmo tamanho, o codigo acima funciona perfeito, mas com fotos de tamanhos diferentes já da problema... alguma dica ai??? XML: <menu> <item> <fotoevento imagem='portfolio/15anos/15anos_01.jpg'/> <foto tamanhofoto='738'/> </item> <item> <fotoevento imagem='portfolio/15anos/15anos_02.jpg'/> <foto tamanhofoto='738'/> </item> <item> <fotoevento imagem='portfolio/15anos/15anos_03.jpg'/> <foto tamanhofoto='738'/> </item> <item> <fotoevento imagem='portfolio/15anos/15anos_04.jpg'/> <foto tamanhofoto='738'/> </item> <item> <fotoevento imagem='portfolio/15anos/15anos_05.jpg'/> <foto tamanhofoto='472'/> </item> <item> <fotoevento imagem='portfolio/15anos/15anos_06.jpg'/> <foto tamanhofoto='738'/> </item> </menu> Compartilhar este post Link para o post Compartilhar em outros sites
d3rson 0 Denunciar post Postado Junho 10, 2011 Bem.. como não obtive resposta no problema acima.. será que poderiam apenas me esclarecer o que se passa abaixo: var dados:XML = new XML(); var imageList:Array = []; dados.ignoreWhite = true; dados.load("xml/15anos.xml"); dados.onLoad = function():Void { qtd = this.childNodes[0].childNodes.length; _root.qualqtd = this.childNodes[0].childNodes.length; var totalWidth:Number = 0; for (j = 0; j <= qtd; j++) { mcPanels.item_mc.duplicateMovieClip("item_mc" + j,mcPanels.getNextHighestDepth()); mcPanels["item_mc" + j].imagem = this.childNodes[0].childNodes[j].childNodes[0].attributes.imagem; mcPanels["item_mc" + j].tamanho = this.childNodes[0].childNodes[j].childNodes[1].attributes.tamanhofoto; mcPanels["item_mc" + j].foto.loadMovie(mcPanels["item_mc" + j].imagem); mcPanels["item_mc" + j]._x = totalWidth; mcPanels["item_mc" + j]._y = 0; imageList.push(mcPanels["item_mc" + j]); totalWidth = totalWidth + mcPanels["item_mc" + j].tamanho; trace(totalWidth) }//FIM FOR };//FIM DADOS LOAD agora vem o resultado do trace acima, se repararem não está somando.. está colocando um numero na frente do outro.. o porque disso??? 0100 010050 010050100 010050100undefined o meu XML está assim: <menu> <item> <fotoevento imagem='portfolio/15anos/Untitled-1.jpg'/> <foto tamanhofoto='100'/> </item> <item> <fotoevento imagem='portfolio/15anos/Untitled-2.jpg'/> <foto tamanhofoto='50'/> </item> <item> <fotoevento imagem='portfolio/15anos/Untitled-3.jpg'/> <foto tamanhofoto='100'/> </item> </menu> onde "tamanhofoto" é a largura de cada imagem. resolvido!!! o problema estava na linha que chamo o tamanhodaimagem do XML errado: mcPanels["item_mc" + j].tamanho = this.childNodes[0].childNodes[j].childNodes[1].attributes.tamanhofoto; correto: mcPanels["item_mc" + j].tamanho = Number (this.childNodes[0].childNodes[j].childNodes[1].attributes.tamanhofoto); Compartilhar este post Link para o post Compartilhar em outros sites
carneirinho 7 Denunciar post Postado Junho 10, 2011 Não tinha visto ainda o seu post, mas seu raciocínio está certo, se você está indicando a largura dele pelo xml, é só você ir somando como fez. O seu código não está funcionando porque tudo o que se puxa de xml vem como string, então você precisa transformar essa string em number para que ele interprete corretamente e faça o cálculo, um parseInt ja resolve seu problema, tente assim: dados.onLoad = function():Void { qtd = this.childNodes[0].childNodes.length; _root.qualqtd = this.childNodes[0].childNodes.length; var totalWidth:Number = 0; for (j = 0; j < qtd; j++) { // tirei o menor ou igual, pois com o igual ele daria o ultimo valor como undefined mcPanels.item_mc.duplicateMovieClip("item_mc" + j,mcPanels.getNextHighestDepth()); mcPanels["item_mc" + j].imagem = this.childNodes[0].childNodes[j].childNodes[0].attributes.imagem; mcPanels["item_mc" + j].tamanho = parseInt(this.childNodes[0].childNodes[j].childNodes[1].attributes.tamanhofoto); mcPanels["item_mc" + j].foto.loadMovie(mcPanels["item_mc" + j].imagem); mcPanels["item_mc" + j]._x = totalWidth; mcPanels["item_mc" + j]._y = 0; imageList.push(mcPanels["item_mc" + j]); totalWidth = totalWidth + mcPanels["item_mc" + j].tamanho; trace(totalWidth) }//FIM FOR };//FIM DADOS LOAD Compartilhar este post Link para o post Compartilhar em outros sites
d3rson 0 Denunciar post Postado Junho 10, 2011 hhe pois é... eu vi esse erro agora pouco... mas como eu nunca tinha feito somas com XML eu nem sabia dessa opção de transformar direto quando importo do XML.. btw... vlew ai... esse "parseInt" ele transforma em inteiro? .. ou nada disso? seria a mesma coisa que colocar "Number"? Imaginando que eu não tenho o tamanho da imagem no XML, como ficaria???.... Compartilhar este post Link para o post Compartilhar em outros sites
carneirinho 7 Denunciar post Postado Junho 10, 2011 Tem várias maneiras de resolver, você pode criar uma variável "carregados" com valor zero, e fazer uma função que faz um preloader de cada imagem, e a cada imagem carregada, ele somaria esse carregados até atingir um total de imagens. Enquando isso você pode rodar um onEnterFrame com um for, reposicionando todos os movieclips em relação ao _x + _width do movieclip anterior. Pra facilitar esse for, você pode criar um array e colocar todos os movieclips duplicados nesse array, assim no onEnterFrame ele roda o for com relação ao tanto de imagens e vai acertando a posição deles, sem array seria mais ou menos assim: onEnterFrame = function(){ for(i = 1; i < dados.childNodes[0].childNodes.length; i++){ // começa pelo 1 porque o zero sempre ficará na posição zero mcPanels["item_mc" + i]._x = mcPanels["item_mc" + (i - 1)]._x + mcPanels["item_mc" + (i - 1)]._width; } } Compartilhar este post Link para o post Compartilhar em outros sites
d3rson 0 Denunciar post Postado Junho 10, 2011 entendi... por que botar o tamanho de + de 180 imagens. no XML é trash!!!! esse onEnterFrame ele ficaria dentro do meu for onde duplico os MovieClips? ou substituiria ele?? mas a minha maior dúvida era mesmo na lógica da função de posicionamento do movieclip sem um valor determinado... muito obrigado pela dica.. vou testar aqui.. qualquer coisa volto a postar.... Compartilhar este post Link para o post Compartilhar em outros sites
carneirinho 7 Denunciar post Postado Junho 10, 2011 Ficaria depois do seu for, você usa seu for pra inserir os movieclips no palco e depois você cria um onEnterFrame que posiciona todos os movieclisp do stage, mas isso fica processando, então o ideal é você deletar esse onEnterFrame depois que todos foram carregados, entendeu? Compartilhar este post Link para o post Compartilhar em outros sites