Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

ddlightw

arrastar objetos com número limitado

Recommended Posts

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

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.