Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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);*
}
}
}
}
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.
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.
podia-me intregar esse código neste meu código?e que sou nova em AS 3.0 ainda tenho muito que aprender..Nao sei muito bem como se faz isso.
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);
}
}
}
}>
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
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;
}
}
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.
Você quer contar os movieclips que já foram posicionados?