ddlightw 0 Denunciar post Postado Fevereiro 12, 2013 Eu tenho duas caixas e em uma caixa eu quero arrastar 2 objetos e na outra 3. Total de 5 objetos, como eu faço para limitar o valor de cada caixa e finalizar quando não tiver mais nada a ser arrastado? Compartilhar este post Link para o post Compartilhar em outros sites
Elektra 102 Denunciar post Postado Fevereiro 19, 2013 Array inicial com 5 objetos, drag com HitTest, 2 Arrays vazios, contador, e verificação. Quando os 2 Arrays vazios forem preenchidos, chama uma função que finaliza. Abs Compartilhar este post Link para o post Compartilhar em outros sites
ddlightw 0 Denunciar post Postado Agosto 31, 2013 Obrigado, só não sei como preencher esses Arrays vazios. FIz uns testes sem array, mas é mais ou menos disso que eu precisava: var numero:uint; var numero1:uint; var numero2:uint; var posX:Number; var posY:Number; posX = bola_mc.x; posY = triangulo_mc.y; root.addEventListener(Event.ENTER_FRAME, contador); //CONTADOR function contador (e:Event) { numero = numero1 + numero2; contador_txt.text = numero.toString(); if(numero == 100){ root.removeEventListener (Event.ENTER_FRAME, contador); }//end if }//end contador bola_mc.addEventListener(MouseEvent.MOUSE_DOWN, drag); bola_mc.addEventListener(MouseEvent.MOUSE_UP, drop); function drag(event:MouseEvent):void { bola_mc.startDrag(); } function drop(event:MouseEvent):void { bola_mc.stopDrag(); if( bola_mc.hitTestObject(alvo_mc)){ bola_mc.alpha = 0; } } triangulo_mc.addEventListener(MouseEvent.MOUSE_DOWN, drag1); triangulo_mc.addEventListener(MouseEvent.MOUSE_UP, drop1); function drag1(event:MouseEvent):void { triangulo_mc.startDrag(); } function drop1(event:MouseEvent):void { triangulo_mc.stopDrag(); if( triangulo_mc.hitTestObject(alvo_mc)){ triangulo_mc.alpha = 0; } } alvo_mc.addEventListener(Event.ENTER_FRAME, mover); function mover(e:Event):void { if( bola_mc.hitTestObject(alvo_mc)){ contador_txt.text = numero.toString(); numero1 = 10; } if( triangulo_mc.hitTestObject(alvo_mc)){ //bola_mc.visible = false; contador_txt.text = numero.toString(); numero2 = 20; } } Queria acrescentar um código que fizesse voltar tudo para o ponto inicial e parasse de somar, mas não deu muito certo: if(total > 400){ selectClip.visible = true; total == 400; } Tweener.addTween(lastClip, {x:lastposX.x, y:lastposY.y, time:0.2, transition:"easeOutBack"}); } Desculpe a minha ignorância, mas eu preciso de um exemplo de código para entender. Me confundo muito com array. Compartilhar este post Link para o post Compartilhar em outros sites
ddlightw 0 Denunciar post Postado Outubro 6, 2013 Não entendi a idéia de preencher os arrays, fiz uns códigos com verificação, mas acho que o escopo e alógica não ficaram corretos. Não consigo puxar a posição do hit, fiz um que funcionou mais ou menos que é o primeiro e o outro tentei com array, mas deu erro. Eu fiz um outro loop do hit porque eu não sei como fazer para quando o objeto encostar nele ficar com a posição dele, porque não consigo fazer funcionar sem "var dropIndex:int = dropArray.indexOf(e.currentTarget);". Essa linha faz associar o índice do drop (objeto arrastado) e do hit (alvo), mas eu não quero ele associe, só preciso que depois de arrastar 2 movieclips, ele não aceite mais outros objetos. O que está errado? var livro1:Number = 0; var livro2:Number = 0; var livro3:Number = 0; var livro4:Number = 0; var livro5:Number = 0; var objectoriginalX:Number; var objectoriginalY:Number; drop1.addEventListener(MouseEvent.MOUSE_DOWN, drag); drop1.addEventListener(MouseEvent.MOUSE_UP, drop); drop2.addEventListener(MouseEvent.MOUSE_DOWN, drag); drop2.addEventListener(MouseEvent.MOUSE_UP, drop); drop3.addEventListener(MouseEvent.MOUSE_DOWN, drag); drop3.addEventListener(MouseEvent.MOUSE_UP, drop); drop4.addEventListener(MouseEvent.MOUSE_DOWN, drag); drop4.addEventListener(MouseEvent.MOUSE_UP, drop); drop5.addEventListener(MouseEvent.MOUSE_DOWN, drag); drop5.addEventListener(MouseEvent.MOUSE_UP, drop); drop6.addEventListener(MouseEvent.MOUSE_DOWN, drag); drop6.addEventListener(MouseEvent.MOUSE_UP, drop); drop7.addEventListener(MouseEvent.MOUSE_DOWN, drag); drop7.addEventListener(MouseEvent.MOUSE_UP, drop); drop8.addEventListener(MouseEvent.MOUSE_DOWN, drag); drop8.addEventListener(MouseEvent.MOUSE_UP, drop); drop9.addEventListener(MouseEvent.MOUSE_DOWN, drag); drop9.addEventListener(MouseEvent.MOUSE_UP, drop); drop10.addEventListener(MouseEvent.MOUSE_DOWN, drag); drop10.addEventListener(MouseEvent.MOUSE_UP, drop); function drag(event:MouseEvent):void { event.target.startDrag(); objectoriginalX = event.target.x; objectoriginalY = event.target.y; } function drop(event:MouseEvent):void { event.target.stopDrag(); var target:MovieClip = event.currentTarget as MovieClip; if (target.hitTestObject(HitTarget1)) { target.x = HitTarget1.x + 5; target.y = HitTarget1.y; livro1++; trace(livro1); } if (livro1 > 2) { target.x = objectoriginalX; target.y = objectoriginalY; //counter = 0; trace(event.target.x); trace(HitTarget1.x); } /////////////////////////////////// if (target.hitTestObject(HitTarget2)) { target.x = HitTarget2.x + 5; target.y = HitTarget2.y; livro2++; trace(livro2); } if (livro2 > 2) { target.x = objectoriginalX; target.y = objectoriginalY; //counter = 0; trace(event.target.x); trace(HitTarget2.x); } ///////////////////////////////////////////////// if (target.hitTestObject(HitTarget3)) { target.x = HitTarget3.x + 5; target.y = HitTarget3.y; livro3++; trace(livro3); } if (livro3 > 2) { target.x = objectoriginalX; target.y = objectoriginalY; //counter = 0; trace(event.target.x); trace(HitTarget3.x); } ////////////////////////////////////////////////////////// if (target.hitTestObject(HitTarget4)) { target.x = HitTarget4.x + 5; target.y = HitTarget4.y; livro4++; trace(livro4); } if (livro4 > 2) { target.x = objectoriginalX; target.y = objectoriginalY; //counter = 0; trace(event.target.x); trace(HitTarget4.x); } /////////////////////////////////////////////////// if (target.hitTestObject(HitTarget5)) { target.x = HitTarget5.x + 5; target.y = HitTarget5.y; livro5++; trace(livro5); } if (livro5 > 2) { target.x = objectoriginalX; target.y = objectoriginalY; //counter = 0; trace(event.target.x); trace(HitTarget5.x); } /////////////////// } Segunda tentativa, com erro:#2007 objeto não pode ser nulo var hitArray:Array = new Array(hitTarget1,hitTarget2); var dropArray:Array = new Array(drop1,drop2); var positionsArray:Array = new Array(); var counter:Number = 0; for (var i:int = 0; i < dropArray.length; i++) { dropArray[i].buttonMode = true; dropArray[i].addEventListener(MouseEvent.MOUSE_DOWN, mdown); dropArray[i].addEventListener(MouseEvent.MOUSE_UP, mUp); positionsArray.push({xPos:dropArray[i].x, yPos:dropArray[i].y}); } function mdown(e:MouseEvent):void { e.currentTarget.startDrag(); setChildIndex(MovieClip(e.currentTarget), numChildren - 1); } function mUp(e:MouseEvent):void { var dropIndex:int = dropArray.indexOf(e.currentTarget); var target:MovieClip = e.currentTarget as MovieClip; target.stopDrag(); for (var j=0; j < hitArray.length;j++) { trace(hitArray[j]); } if (target.hitTestObject(hitArray[j])) { target.x = hitArray[j].x; target.y = hitArray[j].y; counter++; trace(counter); trace(hitArray[j].x); } else { target.x = positionsArray[i].xPos; target.y = positionsArray[i].yPos; trace(positionsArray[i].xPos); } } Compartilhar este post Link para o post Compartilhar em outros sites
Elektra 102 Denunciar post Postado Outubro 6, 2013 Você preenche arrays vazios com a propriedade "push". http://help.adobe.com/pt_BR/FlashPlatform/reference/actionscript/3/Array.html#push() O exemplo do Adobe Help não é dos melhores, sugiro pesquise tutoriais melhores (encontra facilmente). Jogue seus objetos em um array "geral" (inicial). Depois irá verificar (if...) se os objetos/hits "x, y, z" são os elementos corretos para preencher o array "alpha" (esse será o array vazio que recebe 'push'). Compartilhar este post Link para o post Compartilhar em outros sites