Ir para conteúdo

Arquivado

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

Dina de Sousa

Contar movieClips que estão no palco AS 3.0

Recommended Posts

Estou a desenvolver um jogo quebra-cabeça, mas queria que fizesse a contagem das peças para quando acabasse o puzzle aparecesse uma mensagem.

 

tenho o seguinte código:

 

package

{

import flash.display.Sprite;

import flash.events.MouseEvent;

 

public class Main extends Sprite

{

var xPos:int;

var yPos:int;

static var totalPecas:Number=0;

 

public function Main():void

{

addListeners(p1, p2, p3, p4, p5, p6, p7, p8, p9);

}

 

private function getPosition(target:Object):void

{

xPos = target.x;

yPos = target.y;

}

 

private function dragObject(e:MouseEvent):void

{

getPosition(e.target);

 

e.target.startDrag(true);

}

 

private function stopDragObject(e:MouseEvent):void

{

if (e.target.hitTestObject(getChildByName(e.target.name + "Target")))

{

e.target.x = getChildByName(e.target.name + "Target").x;

e.target.y = getChildByName(e.target.name + "Target").y;

}

else

{

e.target.x = xPos;

e.target.y = yPos;

}

 

e.target.stopDrag();

}

 

private function addListeners(... objects):void

{

for (var i:int = 0; i < objects.length; i++)

{

objects.addEventListener(MouseEvent.MOUSE_DOWN, dragObject);

objects.addEventListener(MouseEvent.MOUSE_UP, stopDragObject);

}

}

}

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

sim os movieClips estão no palco, e eu queria quando eles fossem posicionados no lugar certo aparecesse uma mensagem..para isso tenho que fazer a contagem das peças para quando elas tiverem todos no lugar certo apareça a mensagem.Não sei se me está a perceber..estou a fazer o jogo quebra-cabeças.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma maneira bem simples é a seguinte:

Você pode criar um contador e incrementá-lo sempre que uma peça for encaixada. Então, no final da sua função drop você chama outra função que verifica se o contador é igual ao total de peças que você tem (acho que deve ser 9). Se for igual você mostra a mensagem, se for diferente não ocorre nada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Alterações em negrito.

 

package {
import flash.display.Sprite;
import flash.events.MouseEvent;

public class Main extends Sprite {
	var xPos:int;
	var yPos:int;
	[b]var contador:int;[/b]
	static var totalPecas:Number = 0;

	public function Main():void {
		addListeners(p1, p2, p3, p4, p5, p6, p7, p8, p9);
	}

	private function getPosition(target:Object):void {
		xPos = target.x;
		yPos = target.y;
	}

	private function dragObject(e:MouseEvent):void {
		getPosition(e.target);

		e.target.startDrag(true);
	}

	private function stopDragObject(e:MouseEvent):void {
		if (e.target.hitTestObject(getChildByName(e.target.name + "Target"))) {
			e.target.x = getChildByName(e.target.name + "Target").x;
			e.target.y = getChildByName(e.target.name + "Target").y;

			[b]contador++;[/b]
		}
		else {
			e.target.x = xPos;
			e.target.y = yPos;
		}

		e.target.stopDrag();

		[b]corrige();[/b]
	}

	[b]private function corrige():void {

		if (contador == totalDePecas) 
			//mostra sua mensagem
	}[/b]

	private function addListeners(... objects):void {
		for (var i:int = 0; i < objects.length; i++) {
			objects[i].addEventListener(MouseEvent.MOUSE_DOWN, dragObject);
			objects[i].addEventListener(MouseEvent.MOUSE_UP, stopDragObject);
		}
	}
}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Alterações em negrito.

 

package {
import flash.display.Sprite;
import flash.events.MouseEvent;

public class Main extends Sprite {
	var xPos:int;
	var yPos:int;
	[b]var contador:int;[/b]
	static var totalPecas:Number = 0;

	public function Main():void {
		addListeners(p1, p2, p3, p4, p5, p6, p7, p8, p9);
	}

	private function getPosition(target:Object):void {
		xPos = target.x;
		yPos = target.y;
	}

	private function dragObject(e:MouseEvent):void {
		getPosition(e.target);

		e.target.startDrag(true);
	}

	private function stopDragObject(e:MouseEvent):void {
		if (e.target.hitTestObject(getChildByName(e.target.name + "Target"))) {
			e.target.x = getChildByName(e.target.name + "Target").x;
			e.target.y = getChildByName(e.target.name + "Target").y;

			[b]contador++;[/b]
		}
		else {
			e.target.x = xPos;
			e.target.y = yPos;
		}

		e.target.stopDrag();

		[b]corrige();[/b]
	}

	[b]private function corrige():void {

		if (contador == totalDePecas) 
			//mostra sua mensagem
	}[/b]

	private function addListeners(... objects):void {
		for (var i:int = 0; i < objects.length; i++) {
			objects[i].addEventListener(MouseEvent.MOUSE_DOWN, dragObject);
			objects[i].addEventListener(MouseEvent.MOUSE_UP, stopDragObject);
		}
	}
}
}

 

 

 

Obrigada pela ajuda, vou experimentar

Compartilhar este post


Link para o post
Compartilhar em outros sites

tive que mudar o código e fazer com arrays, só continuo sem saber como fazer a contagem das peças para aparecer por exemplo o botao reset.

 

import flash.media.Sound;

var hitArray:Array = new Array(hitTarget1,hitTarget2,hitTarget3,hitTarget4,hitTarget5,hitTarget6,hitTarget7,hitTarget8);

var dropArray:Array = new Array(drop1,drop2,drop3,drop4,drop5,drop6,drop7,drop8);

var positionsArray:Array = new Array();

 

 

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

 

if (target.hitTestObject(hitArray[dropIndex])) {

target.x = hitArray[dropIndex].x;

target.y = hitArray[dropIndex].y;

new CERTO().play();

}else{

target.x = positionsArray[dropIndex].xPos;

target.y = positionsArray[dropIndex].yPos;

}

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode declarar a variável contadora da mesma maneira. Depois incrementa ela dentro do if da função mUp e no final dessa mesma função chama aquela função que corrige para verificar se o contador é igual à quantidade de peças.

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.