Michael_c 0 Denunciar post Postado Março 20, 2009 Boa Noite Galera!! Há muito tempo não trabalhava com Flash... Estava bitolado nos .NET da vida.... Porém, pintou um JOB para montar um joguinho de vestir uma boneca em Flash, o esquema é bem parecido com um quebra-cabeças, nada muito complicado. Montei o Flash, está funcionando. Mas tem um bug que não consegui entender. Vou tentar explicar: Objetivo do arquivo: Montar uma boneca e salvar a configuração da roupa em um DB. Como funciona: É só clicar na boneca ou na roupa e arrastar para o box amarelo. Problema: Depois da boneca montada, quando é acionada a opção de "Finalizar", mesmo depois de ser direcionado para outro frame os MCs continuam no palco. Link para teste Obs.: Todo o arquivo ainda é um estudo, as ilustrações e o layout são apenas para simulação. Além da minha dúvida, se puderem criticar e dar dicas para melhorar o código, ficarei muito grato. Abaixo segue o código AS2: //FRAME 1 stop(); #include "mc_tween2.as" var boneca:String = ""; var roupa:String = ""; var conjunto:String = ""; mcBalvo._alpha = 0; pos_mcBalvo_x = mcBalvo._x pos_mcBalvo_y = mcBalvo._y function geral() { //BONECAS ---------------------------------------- var pos_mcB1_x = mcB1._x; var pos_mcB1_y = mcB1._y; var pos_mcB2_x = mcB2._x; var pos_mcB2_y = mcB2._y; var pos_mcB3_x = mcB3._x; var pos_mcB3_y = mcB3._y; function iniciaDrag(objeto) { objeto.swapDepths(objeto.getNextHighestDepth()); startDrag(objeto); } function acao(objeto, pos_x, pos_y, alvo_x, alvo_y) { objeto.swapDepths(objeto.getNextHighestDepth()); stopDrag(); if (!objeto.hitTest(mcPalco)) { objeto.slideTo(pos_x, pos_y); } else { var num_atual = objeto._name.substring(3, 4) var i:Number = 0 for (i=0; i<5; i++) { if (i != num_atual) { var mcAtual = eval("mcB"+i); var pos_x_ant = eval("pos_mcB"+i+"_x") var pos_y_ant = eval("pos_mcB"+i+"_y") mcAtual.slideTo(pos_x_ant, pos_y_ant); } } boneca = "B"+num_atual; conjunto_total(boneca); objeto.slideTo(alvo_x, alvo_y); } } this.mcB1.onPress = function() { iniciaDrag(mcB1) }; this.mcB2.onPress = function() { iniciaDrag(mcB2) }; this.mcB3.onPress = function() { iniciaDrag(mcB3) }; this.mcB1.onRelease = function() { acao(mcB1, pos_mcB1_x, pos_mcB1_y, pos_mcBalvo_x, pos_mcBalvo_y); }; this.mcB2.onRelease = function() { acao(mcB2, pos_mcB2_x, pos_mcB2_y, pos_mcBalvo_x, pos_mcBalvo_y); }; this.mcB3.onRelease = function() { acao(mcB3, pos_mcB3_x, pos_mcB3_y, pos_mcBalvo_x, pos_mcBalvo_y); }; //ROUPAS ---------------------------------- var pos_mcR1_x = mcR1._x; var pos_mcR1_y = mcR1._y; var pos_mcR2_x = mcR2._x; var pos_mcR2_y = mcR2._y; var pos_mcR3_x = mcR3._x; var pos_mcR3_y = mcR3._y; var pos_mcR4_x = mcR4._x; var pos_mcR4_y = mcR4._y; var pos_mcRalvo_x = 352; var pos_mcRalvo_y = 442; var contagem:Number = 1000; function iniciaDrag2(objeto) { contagem = contagem + 1 objeto.swapDepths(contagem); startDrag(objeto); } function acao2(objeto, pos_x, pos_y, alvo_x, alvo_y) { contagem = contagem + 1 objeto.swapDepths(contagem); stopDrag(); if (!objeto.hitTest(mcPalco)) { objeto.slideTo(pos_x, pos_y); } else { var num_atual = objeto._name.substring(3, 4) var i = 0 for (i=0; i<5; i++) { if (i != num_atual) { var mcAtual = eval("mcR"+i); var pos_x_ant = eval("pos_mcR"+i+"_x") var pos_y_ant = eval("pos_mcR"+i+"_y") mcAtual.slideTo(pos_x_ant, pos_y_ant); } } roupa = "R"+num_atual conjunto_total(roupa) objeto.slideTo(alvo_x, alvo_y); } } this.mcR1.onPress = function() { iniciaDrag2(mcR1) }; this.mcR2.onPress = function() { iniciaDrag2(mcR2) }; this.mcR3.onPress = function() { iniciaDrag2(mcR3) }; this.mcR4.onPress = function() { iniciaDrag2(mcR4) }; this.mcR1.onRelease = function() { acao2(mcR1, pos_mcR1_x, pos_mcR1_y, (pos_mcRalvo_x-2.5), pos_mcRalvo_y); }; this.mcR2.onRelease = function() { acao2(mcR2, pos_mcR2_x, pos_mcR2_y, pos_mcRalvo_x, (pos_mcRalvo_y+1)); }; this.mcR3.onRelease = function() { acao2(mcR3, pos_mcR3_x, pos_mcR3_y, (pos_mcRalvo_x-1), (pos_mcRalvo_y+2)); }; this.mcR4.onRelease = function() { acao2(mcR4, pos_mcR4_x, pos_mcR4_y, pos_mcRalvo_x,(pos_mcRalvo_y+3)); }; } function conjunto_total() { conjunto = boneca + "/" + roupa } geral(); conjunto_total(); //FRAME 2 stop(); var todos:String = conjunto; Se for útil para alguém, segue o link para fazer o download dos arquivos fontes: Download dos arquivos Desde já obrigado e um ótimo final de semana. Michael C. Compartilhar este post Link para o post Compartilhar em outros sites
SlyX 0 Denunciar post Postado Março 21, 2009 tu ja tentou dar um removeMovieClip(); ?? Compartilhar este post Link para o post Compartilhar em outros sites
Michael_c 0 Denunciar post Postado Março 21, 2009 SlyX, Não tentei... vou tentar e posto o resultado... Obrigado, Michael C. Compartilhar este post Link para o post Compartilhar em outros sites
Michael_c 0 Denunciar post Postado Março 23, 2009 Fala galera, Utilizei o "removeMovieClip();" que o SlyX recomendou e funcionou, consegui retirar os movieclips do palco, porém, será que essa é a melhor maneira de resolver o problema? Não sei se é a maneira mais dinâmica para fazer isso... Alguém sabe por que os movieclips poderiam continuar no palco mesmo não estando inseridos no frame? Os links de teste continuam os mesmos. Obrigado. Michael C. Compartilhar este post Link para o post Compartilhar em outros sites
Eder Fortunato 15 Denunciar post Postado Março 23, 2009 isso acontece comigo tb, o problema esta no swapDepths, testa tirar ele pra você ver sempre que você usa ele o movieClip vai ficar por lá, pra remover só com removeMovieClip []´s Compartilhar este post Link para o post Compartilhar em outros sites
SlyX 0 Denunciar post Postado Março 23, 2009 bem, você pode dar um unloadMovie(); no caso o movieclip continua no palco, mas sem conteudo.. ou como o tio Eder falou, arrumar com o proprio removeMovieClip() só que corrigindo os swaps assim: //descarregando o conteudo do movieclip meuMC.unloadMovie(); //removendo o movieclip do palco meuMC.swapDepths(999); meuMC.removeMovieClip(); Att. Compartilhar este post Link para o post Compartilhar em outros sites
Michael_c 0 Denunciar post Postado Março 24, 2009 Galera, Ok. Entendido. SwapDepths sem vergonha! hehehehe... Já está funcionando com o removeMovieClip(); Super obrigado! Abraços, Michael C. Compartilhar este post Link para o post Compartilhar em outros sites
chamafe 0 Denunciar post Postado Agosto 19, 2009 Oi Michel, estou precisando de algo parecido com isso. Poderia entrar em contato comigo para passar o orç desse job e pra eu ver como o seu ficou? Att Compartilhar este post Link para o post Compartilhar em outros sites
Thiago de Oliveira Cruz 21 Denunciar post Postado Agosto 19, 2009 Recomendo você mandar uma MP pra ele... Desse jeito ai dificilmente ele vai responder. Abraços Compartilhar este post Link para o post Compartilhar em outros sites