the_flash 0 Denunciar post Postado Outubro 27, 2006 Seguinte, no palco eu vou ter um retangulo maior que vai ser o board; E varios retangulos menores de tamanhos diferentes, preciso arrastar os menores pra dentro do maior(board) e que eles se acomodem dentro do mesmo Sendo que tem que haver uma distancia padrão entre os menores, e que quando tirar um menor, os demais vão pra direita e ocupem o seu espaço... Consegui isso em partes, o código não é de alto nivel, rs Se alguém puder dar uma força, vejam se ficou claro o que eu quero Segue o código plat = 5; pedal01.onPress = function() { this.startDrag(); }; pedal02.onPress = function() { this.startDrag(); }; pedal03.onPress = function() { this.startDrag(); }; pedal04.onPress = function() { this.startDrag(); }; pedal05.onPress = function() { this.startDrag(); }; pedal01.onRelease = pedal01.onReleaseOutside=function () { this.stopDrag(); if (this.hitTest(_root.board)) { this._x = _root.board._x+plat; this._y = _root.board._y+5; plat = plat+this._width+5; p1b = true; } else { p1b = false; plat = plat-this._width; } }; pedal02.onRelease = pedal02.onReleaseOutside=function () { this.stopDrag(); if (this.hitTest(_root.board)) { this._x = _root.board._x+plat; this._y = _root.board._y+5; plat = plat+this._width+5; p1b = true; } else { p1b = false; plat = plat-this._width; } }; pedal03.onRelease = pedal03.onReleaseOutside=function () { this.stopDrag(); if (this.hitTest(_root.board)) { this._x = _root.board._x+plat; this._y = _root.board._y+5; plat = plat+this._width+5; p1b = true; } else { p1b = false; plat = plat-this._width; } }; pedal04.onRelease = pedal04.onReleaseOutside=function () { this.stopDrag(); if (this.hitTest(_root.board)) { this._x = _root.board._x+plat; this._y = _root.board._y+5; plat = plat+this._width+5; p1b = true; } else { p1b = false; plat = plat-this._width; } }; pedal05.onRelease = pedal05.onReleaseOutside=function () { this.stopDrag(); if (this.hitTest(_root.board)) { this._x = _root.board._x+plat; this._y = _root.board._y+5; plat = plat+this._width+5; p1b = true; } else { p1b = false; plat = plat-this._width; } }; Compartilhar este post Link para o post Compartilhar em outros sites
Antoniosp 2 Denunciar post Postado Outubro 27, 2006 Cara, se não se importar eu mudei quase tudo, hehe. Ao invés de trabalhar com uma variável que dá a distância (plats) eu usei uma array. Quando você arrastar um objeto para cima do board, ele vai adicionar esse objeto no final da array. E quando arrastar para fora, vai tirar esse movieclip da array. Aí a array vai sempre conter os movieclips que devem estar no board e na ordem certa. Depois é só chamar uma função para organizar esses movieclips. //Array que conterá os pedais que está dentro do boardvar plats:Array = Array();//Distancia entre um pedal e outrovar distancia:Number = 100;//Um loop para colocar a função para todos os pedais ao mesmo tempofor (var i:Number = 1; i <= 5; i++) { //Pegando o pedal atual var pedal_atual:MovieClip = _root["pedal0" + i]; //Colcando o onPress pedal_atual.onPress = function() { this.startDrag(); }; //... pedal_atual.onRelease = pedal_atual.onReleaseOutside = function () { this.stopDrag(); //Se tiver encostado no board if (this.hitTest(_root.board)) { //Já ajeita o y this._y = _root.board._y + 5; //Joga ele pra última posição plats.removerItem(this); plats.push(this); //Arruma a posição de acordo com a array arrumaPedais(); //Caso ele seja arrastado para fora do board } else { //Só remove ele da array plats.removerItem(this); arrumaPedais(); } };}//Função para arrumar o _x dos pedaisfunction arrumaPedais() { var n = plats.length; for (var a:Number = 0; a < n; a++) { plats[a]._x = a * distancia + board._x + 5; }}//Prototype para procurar um elemento na array e exclui-lo por Francisco TeodoricoArray.prototype.removerItem = function(elemento) { for (var z = 0; z < this.length; ++z) { if (this[z] == elemento) { this.splice(z, 1); } } return false;}; Caramba, acho que ficou legal. :) Flw Compartilhar este post Link para o post Compartilhar em outros sites
the_flash 0 Denunciar post Postado Outubro 27, 2006 Cara, você merece um prêmio!!Ótimo, só tem um probleminha ainda...Quando eu arrasto os pedais pro boardvar distancia:Number = 100;ele tá dando 100 de distancia entre todos os pedais, na verdade teria que ser o tamanho de cada pedal + 100 (ou outro valor) e cada pedal tem um tamanhoEntendeu?[edit]Acho que não consegui explicar direito, eu usei pedais do mesmo tamanho e ficou perfeito, o problema aparece quando uso pedais de tamanhos diferentes, ai um pedal fica sobre o outro. (agora acho que expliquei bem) Compartilhar este post Link para o post Compartilhar em outros sites
Antoniosp 2 Denunciar post Postado Outubro 27, 2006 A sim, achei que era fixo. Mas é fácil de mudar: //Função para arrumar o _x dos pedaisfunction arrumaPedais() { var n = plats.length; for (var a:Number = 0; a < n; a++) { distancia = 0; for (var b:Number = 0; b < a; b++) { distancia += plats[b]._width + 10; } plats[a]._x = distancia + board._x + 10; }} Uou, vou até guardar esse fla, hehe. Flw Compartilhar este post Link para o post Compartilhar em outros sites
the_flash 0 Denunciar post Postado Outubro 30, 2006 Funcionou perfeito!Muito bom mesmo, me motivou a estudar mais.Só to pensando em uma coisa, o board é retangular e cabem duas fileiras de pedais...E os pedais variam de altura também, quando atingir o limite de largura na fileira de cima, o pedal vai pra fileira de baixo.Ex: Eu jogo um pedal de 100px de altura e 25px de largura e mais cinco pedais de 50px de altura e 25px de largura, atingido o limite, eu jogo mais um de 50px de altura e 25px de altura, automaticamente ele pula para a fileira de baixo e respeita a largura de 25px que o primeiro pedal já ocupou.E também, o pedal sendo maior que o espaço disponível (tanto na largura como na altura) tem que dar uma msg de erro ou voltar pra fora do board.Caramba, isso tá ficando complicado! Compartilhar este post Link para o post Compartilhar em outros sites
Antoniosp 2 Denunciar post Postado Outubro 30, 2006 Maluco, você tem sorte que eu gosto desses desafios mais "matemáticos", hehe. Demorei uns 15 minutos, mas ficou legal, diz aí? //Arrays que conterão os pedais que está dentro do board//Linha 1var plats1:Array = Array();//Linha 2var plats2:Array = Array();//Distancia entre um pedal e outrovar distancia:Number = 0;//Um loop para colocar a função para todos os pedais ao mesmo tempofor (var i:Number = 1; i <= 5; i++) { //Pegando o pedal atual var pedal_atual:MovieClip = _root["pedal0" + i]; //Colcando o onPress pedal_atual.onPress = function() { this.startDrag(); }; //... pedal_atual.onRelease = pedal_atual.onReleaseOutside = function () { this.stopDrag(); //Se tiver encostado no board if (this.hitTest(_root.board)) { //Joga ele pra última posição plats1.removerItem(this); plats2.removerItem(this); plats1.push(this); //Arruma a posição de acordo com a array arrumaPedais(); //Caso ele seja arrastado para fora do board } else { //Só remove ele da array plats1.removerItem(this); plats2.removerItem(this); arrumaPedais(); } };}//Função para arrumar o _x dos pedaisfunction arrumaPedais() { //Arrumando a linha 1 arrumaLinha(plats1, 1); //Arrumando linha 2 arrumaLinha(plats2, 2);}//Função que organiza uma linhafunction arrumaLinha(plats:Array, linha:Number) { //Pegando o número de pedais da linha var n = plats.length; for (var a:Number = 0; a < n; a++) { distancia = 0; //... nós calculamos a distância em x... for (var b:Number = 0; b < a; b++) { //... de todos os mcs até ele distancia += plats[b]._width + 10; } //Se a distância for maior que o tamanho do board + a margem if (distancia + plats[a]._width > board._width - 20) { //Se for da linha 1 if (linha == 1) { //Move para a linha de baixo plats2.push(plats[a]); plats1.removerItem(plats[a]); } else { //Se for a linha 2 dá um alerta trace("ta errado seu besta"); } } else { //Move x plats[a]._x = distancia + board._x + 10; //Dependendo da linha, move o y linha == 1 ? plats[a]._y = board._y + 10 : plats[a]._y = board._y + 100; } }}//Prototype para procurar um elemento na array e exclui-lo por Francisco TeodoricoArray.prototype.removerItem = function(elemento) { for (var z = 0; z < this.length; ++z) { if (this[z] == elemento) { this.splice(z, 1); } } return false;}; Haha, aumentou só um pouquinho... http://forum.imasters.com.br/public/style_emoticons/default/yay.gif Bons estudos, deixei tudo comentado, viu? Flw Compartilhar este post Link para o post Compartilhar em outros sites
the_flash 0 Denunciar post Postado Outubro 30, 2006 Muito bom mesmo! Recomenda algum livro de AS?Heheh :) Já to ficando sem graça aqui!Funcionou beleza! O unico ajuste que falta é que os pedais tem que ter altura variavel... Com altura fixa ficou show. E pode ser mais de duas fileiras.Mas se funcionar em duas já tá ótimo! Compartilhar este post Link para o post Compartilhar em outros sites
the_flash 0 Denunciar post Postado Novembro 1, 2006 To tentando fazer funcionar em várias fileiras com altura variável.Já não sei mais o que pensar, alguma sugestão? Compartilhar este post Link para o post Compartilhar em outros sites