quisiera saber si me pudiesen ayudar con el siguiente problema que se me presento:
estoy desarrollando un juego tipo rompecabezas en el cual existen 5 partes y por medio de arrastre llevarlas a cierta posicion..... esto basicamente: Funciona!
el problema es, que la persona que valla a usar esto tiene la opcion de cambiar el color de las partes y estas tienen que tener las mismas funciones de arrastre....
la unica opcion que vi fue, declarar todas las partes (son 3 posibles colores, asi que son 15 partes en total), la que voy a usar darles visible en true y las que no en false, se puede decir que el cambio lo estoy haciendo usando 5 temporales para guardar las posiciones, el problema es que no esta haciendo el arrastre.....
coloco es codigo de solo dos partes y dos colores, estoy solamente probando con la primera parte el cambio total pero no funciona...
yo se que se puede reducir un poco el codigo, pero no veo como...
Código :
var Parte11:parte11 = new parte11();
//posiciones iniciales
Parte11.x = 413.3;
Parte11.y = 100.5;
Parte11.name = "parteActiva1";
var Parte12:parte12 = new parte12();
Parte12.x = 418;
Parte12.y = 195;
Parte12.name = "parteActiva2";
var Parte21:parte31 = new parte31();
Parte21.x = 413.3;
Parte21.y = 100.5;
Parte21.visible = false;
addChild(Parte21);
var Parte22:parte32 = new parte32();
Parte22.x = 418;
Parte22.y = 195;
Parte22.visible = false;
addChild(Parte22);
var parteActiva1:MovieClip = Parte11;
addChild(parteActiva1);
var parteActiva2:MovieClip = Parte12;
addChild(parteActiva2);
// las coordenadas correctas de las piezas en el eje x
var posX:Array=[];
// y y.
var posY:Array=[];
// los estados de cada pieza (true=activa/false=colocada)
var piezasActivas:Array=[];
// numero de piezas colocadas correctamente
var piezasEnPosicion:int=0;
var numeroPiezas:int = 2;
var colorActivo = 1;
for (var i=0; i<numeroPiezas; i++){
var nombre:String = "parteActiva"+(i+1);
// trabajamos una pieza a la vez
var unaPieza:DisplayObject = getChildByName(nombre);
// grabamos coordenadas iniciales
posX.push(unaPieza.x);
//trace(nombre +": "+ posX[i]);
posY.push(unaPieza.y);
// la piezas empiezan inactivas (se activarán al mezclarse)
piezasActivas.push(false);
// al clicarse, empieza el arrastre
unaPieza.addEventListener(MouseEvent.MOUSE_DOWN, empiezaArrastre);
// al soltar el botón del mouse, termina el arrastre
unaPieza.addEventListener(MouseEvent.MOUSE_UP, paraArrastre);
// mostramos cursor de mano
//unaPieza.buttonMode=true;
}
mezclarPiezas();
function empiezaArrastre(e){
setChildIndex(DisplayObject(e.target),(numChildren-1));
// recuperamos numero de la pieza
var miNum = Number(e.target.name.substr(11) - 1);
// si es activa, empezar el arrastre
trace(miNum);
trace(piezasActivas[miNum]);
trace(e.target);
if (piezasActivas[miNum] == true){
e.target.startDrag();
//al cambio de color pasa por ACA PERO NO LO HACE
}
}
function paraArrastre(e){
var laPieza:MovieClip = e.target;
var miNum = Number(e.target.name.substr(11))-1;
//paramos el arrastre
laPieza.stopDrag();
// estamos en la posición correcta?
var distX = Math.abs(laPieza.x - posX[miNum]);
var distY = Math.abs(laPieza.y - posY[miNum]);
// si la distancia en ambos ejes es menor que 10, esta bien colocada
if ( (distX < 150) && (distY < 150) ){
// posicionamos en la posicion correcta
laPieza.x= posX[miNum];
laPieza.y= posY[miNum];
// opacidad al 100%
laPieza.alpha=1;
// desactivamos la pieza
piezasActivas[miNum]=false;
// aumentamos el contador de piezas colocadas
piezasEnPosicion++
//trace(laPieza.name + ": "+ laPieza.x);
}
}
// La funcion de la mezcla mueve las piezas aleatoriamente y establece
// las condiciones del inicio del juego de nuevo.
function mezclarPiezas(){
for (var i=0; i<numeroPiezas; i++){
var nombre:String = "parteActiva"+(i+1);
// accedemos a cada pieza
var unaPieza:DisplayObject = getChildByName(nombre);
// situamos aleatoriamente
unaPieza.x = Math.random() * 400 + 50;
unaPieza.y = Math.random() * 250 + 50;
// transparencia hacia abajo
unaPieza.alpha=0.6
// y vuelve a estar activa
piezasActivas[i]=true;
}
}
color2.addEventListener(MouseEvent.CLICK, selectColor2);
function selectColor2(e:MouseEvent)
{
for (var i=0; i<numeroPiezas; i++){
var nombre:String = "parteActiva"+(i+1);
// accedemos a cada pieza
var unaPieza:DisplayObject = getChildByName(nombre);
unaPieza.visible = false;
unaPieza.name = "parte" + (i+1);
}
var temp1:MovieClip = parteActiva1;
var temp2:MovieClip = parteActiva2;
parteActiva1 = Parte21;
parteActiva2 = Parte22;
parteActiva1.x = temp1.x;
parteActiva1.y = temp1.y;
parteActiva1.name = "parteActiva1";
parteActiva1.visible = true;
//no se para que se usa el enabled ?????
parteActiva1.enabled = true;
piezasActivas[0]=true;
parteActiva1.addEventListener(MouseEvent.MOUSE_DOWN, empiezaArrastre);
parteActiva1.addEventListener(MouseEvent.MOUSE_DOWN, paraArrastre);
parteActiva2.x = temp2.x;
parteActiva2.y = temp2.y;
parteActiva2.name = "parteActiva2";
parteActiva2.visible = true;
}
ahh y dos cosas mas:
1) como estoy haciendo un cambio del index...... al cambiar de frame los objetos me van a quedar .... como hago para borrarlos??
2) como borro todo lo referente a l MC, con el fin de liberar memoria
gracias por todo
