Ir para conteúdo

Arquivado

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

ddlightw

Jogo de ligar e arrastar as3

Recommended Posts

Estou com um problema que tudo o que eu tenho não está servindo, tudo é modificado no processo e eu estou ficando com muitas dúvidas na montagem do código, onde eu chamo determinada função, como eu reinicio e reposiciono movieclips com array.

 

1 - Eu tenho um jogo de arrastar que eu fiquei tentando adaptar sem sucesso, o que eu preciso?

 

Que a pessoa arraste mais de uma opção para o mesmo lugar.

 

Quantidade limitada, só posso arrastar 2 movieclips para o mesmo alvo.

 

Nesse código eu tentei alterar as posições com array, mas me perdi na lógica. No final os objetos deveriam voltar para posições diferentes.

 

var hitArray:Array = new Array(hitTarget1,hitTarget2,hitTarget3,hitTarget4);
var dropArray:Array = new Array(drop1,drop2,drop3,drop4);
var positionsArray:Array = new Array();


//This adds the mouse down and up listener to the drop instances
//and add the starting x and y positions of the drop instances
//into the array.
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});
}

//This drags the object that has been selected and moves it
//to the top of the display list. This means you can't drag
//this object underneath anything.
function mdown(e:MouseEvent):void {
e.currentTarget.startDrag();
setChildIndex(MovieClip(e.currentTarget), numChildren - 1);
}

//This stops the dragging of the selected object when the mouse is
//released. If the object is dropped on the corresponding target
//then it get set to the x and y position of the target. Otherwise
//it returns to the original position.
function mUp(e:MouseEvent):void {
var dropIndex:int = dropArray.indexOf(e.currentTarget);
var target:MovieClip = e.currentTarget as MovieClip;

target.stopDrag();

if (target.hitTestObject(hitArray[dropIndex])) {
target.x = hitArray[dropIndex].x;
target.y = hitArray[dropIndex].y;
}else{
target.x = positionsArray[dropIndex].xPos;
target.y = positionsArray[dropIndex].yPos;
}
}

2- colunas, nesse eu só tenho como criar a linha, mas eu preciso que essa linha ligue as opções e mais uma vez pediram que ligasse várias opções na mesma alternativa:

 

 

var linha2:Sprite = new Sprite();
var posX:Number = 0;
var posY:Number = 0;


stage.addEventListener(MouseEvent.MOUSE_DOWN, desenha);


function desenha(e:MouseEvent):void
{
	linha2.graphics.clear();
	linha2.graphics.lineStyle(10,0x000000);

	linha2.graphics.moveTo(posX,posY);
	linha2.graphics.lineTo(mouseX,mouseY);
	linha2.graphics.moveTo(posX,posY);
	linha2.graphics.lineTo(posX+0,posY);
	this.addChild(linha2);	
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos em partes.

 

Que a pessoa arraste mais de uma opção para o mesmo lugar.

 

Quantidade limitada, só posso arrastar 2 movieclips para o mesmo alvo.

 

Qualquer mc pode ser arrastado para qualquer lugar?

 

O alvo irá "prender" os 2 objetos (qualquer) após colidir com o alvo? ou apenas os objetos definidos para aquele alvo?

 

 

 

Para qualquer objeto pode usar um contador. Se colidir 2 vezes, torna-se inativo.

 

Para colisão com objetos definidos, pode remover do array global (que contém todos os objetos arrastáveis) e adicionar com uma verificação (checar se é o objeto certo ) em um novo array referente a cada alvo (com apenas 2 índices).

 

 

Não programo jogos, estou considerando o uso de arrays.

 

 

abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Os jogos são quase sempre com a mesma mecânica, mas todo vez que eu preciso modificar aparece a dúvida.

 

Depois que arrasta os dois objetos para o local correto, não deve aceitar mais outros objetos.

O de ligar preciso que a linha seja criada e arrasta mais de uma vez para a mesma opção.

 

Esse código de arrastar faz o hitTarget1 ser o alvo do drop 1, mas eu preciso que o drop1 e o drop2 sejam arrastados para o hitTarget1 e depois de ter os dois arrastados, permitir que outros movieclips sejam arrastados para outros alvos.

 

Isso pega as posições dos objetos arrastáveis:

 

var positionsArray:Array = new Array(); //como eu trabalho com esse array, porque eu precisava que depois os movieclips trocassem de lugar, um com o outro.

 

 

Pode me mostrar um código de exemplo com essa opção de array, tem não deixar um objeto sobre o outro?

 

Tentativa sem array (às vezes não funciona):

 

 

 

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);
}

 

 

Tentativa com array:

 

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.buttonMode = true;
dropArray.addEventListener(MouseEvent.MOUSE_DOWN, mdown);
dropArray.addEventListener(MouseEvent.MOUSE_UP, mUp);

positionsArray.push({xPos:dropArray.x, yPos:dropArray.y});

}

 

function mUp(e:MouseEvent):void
{
//var dropIndex:int = dropArray.indexOf(e.currentTarget);// Não consigo fazer funcionar sem isso, só funciona assim hitArray[dropIndex], mas se eu deixo assim, ele entende que o alvo e o arrastado são 1 e 1, 2 e 2, o que eu não quero


var target:MovieClip = e.currentTarget as MovieClip;

target.stopDrag();

for (var j=0; j < hitArray.length;j++) {// tentativa de pegar a posição do alvo
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.xPos;// não pega a posição dessa forma
target.y = positionsArray.yPos;

trace(positionsArray.xPos);

}


}

 


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.