Comunidad de diseño web y desarrollo en internet online

mostrar y ocultar varios mc con drag and drop

Citar            
MensajeEscrito el 11 Feb 2010 07:07 pm
Hola, queria pedir su ayuda porque tengo una situación:
estoy haciendo una presentación en flash, la idea es que hay cuatro categorias, dentro de cada categoria hay de 5 a 7 mc que se deben poder arrastrar (drag and drop) a un mc "carpeta" (capaz de contener 4 iconos, con el efecto de papelera de reciclaje, es decir, si no se hace el release sobre el sitio determinado vuelve a su lugar incial). Como son tantos iconos, quería que se vean por categorias (hasta ahora hice un boton que on (Release) hace .visible =1 a los mc de su categoria por el nombre on (release) {mc1._visible = 1; hasta el mc7, es decir no es dinámico. Hice un boton invisble alrededor para que on(RollOver) .visible =0 a los mc de su categoria). La situación es que quiero que los mc arrastrados que se encuentra en la carpeta no se apague cuando se apagan los demas de su categoria por el .visible

Para solucionar el asunto del drag and drop me guie en esta página del foro http://foros.cristalab.com/drag-and-drop-t74295/ que también indica como hacer el efecto de papelera de reciclaje

Gracias

Por AndresP

0 de clabLevel



 

firefox
Citar            
MensajeEscrito el 12 Feb 2010 04:25 pm
Primero yo usaria un arreglo para guardar la categoria de cada icono,
supongo que los iconos los tienes nombrados como mc1, mc2, ... mc22, mc23 ...
y supongo que los iconos del 1 al 7 corresponden a la primera categoria, y los iconod del 8 al 12 (por ejemplo) a la segunda, y del 13 al ... a la tercera,
el primer valor corresponde al indice 0

Código :

arrIconos = [0,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4];

los numeros del arreglo corresponderan al número de categoria al que pertenece el icono.
por ejemplo: arrIconos[1] contendrá el número de categoria del mc1

luego inicializaria los movieclips correspondientes a las categorias (supongo que se llaman va1, va2 ...):

Código :

for (nC=1; nC <=4; nC++) { this["va" + nC].nCategoria = nC; }

luego haria un loop para inicializar todos los iconos:

Código :


for (nIcono=1; nIcono<=arrIconos.length; nIcono++) {
   objIcono = this["Icono" + nIcono];
   objIcono.nCategoria = arrIconos[nIcono];
   objIcono.PosX = objIcono._x;
   objIcono.PosY = objIcono._y;
   objIcono.swEncarpetado = false;
   objIcono.onPress = function () {
      startDrag(this,false)
      this.swapDepths(_parent.getNextHighestDepth());
   }
   objIcono.onRelease = function () {
      stopDrag();
      // segun tu codigo puedes colocar el icono en cualquier categoria
      for (nC=1; nC <=4; nC++) {
         objCategoria = this._parent["va" + nC];
         if (this.hitTest (objCategoria)) {
            this.swEncarpetado = true;
            this._x = objCategoria._x; // el icono toma la posición de la categoria
            this._y = objCategoria._y;
            return;
         }
      }
      // pero si lo que quieres es que el icono solo caiga en la categoria a la que pertenece
      // entonces debes usar el siguiente código (ignorando todo el FOR)
      objCategoria = this._parent["va" + this.nCategoria];
      if (this.hitTest (objCategoria)) {
         this.swEncarpetado = true;
         this._x = objCategoria._x; // el icono toma la posición de la categoria
         this._y = objCategoria._y;
         return;
      }
      this._x = this.PosX; // aqui se regresa el icono a su lugar, si es que no se solto en alguna categoria
      this._y = this.PosY;
   }
}


Aqui los movieclips mc1, mc2, ...
les estoy asignando propiedades como

nCategoria que contiene el número de categoria a la que corresponde
PosX y PosY que contienen la posición original del icono
swEncarpetado que nos indicara si el icono ya fue arrastrado a una carpeta o no


-------------------------------------------

Ahora con respecto a mostrar solo los iconos de una categoria,
supongo que tienes 4 movieclips que al oprimirlos (onRelease) solo muestra los iconos de la categoria

entonces el codigo de cada boton debe ser asi:

Código :

on (release) {
   _root.muestraIconos(1);
}

on (release) {
   _root.muestraIconos(2);
}

on (release) {
   _root.muestraIconos(3);
}

on (release) {
   _root.muestraIconos(4);
}


y la función muestraIconos se definirá en el primer fotograma de tu pelicula principal.

Código :

muestraIconos = function (nCatMostrar) {
   for (nIcono=1; nIcono<=arrIconos.length; nIcono++) {
      objIcono = this["Icono" + nIcono];
      if (objIcono.swEncarpetado or objIcono.nCategoria == nCatMostrar) {
         objIcono._visible = true;
      } else {
         objIcono._visible = false;
      }
   }
}


Esta función muestra iconos que no estan encarpetados y que no son de la categoria solicitada
los demás iconos los desaparece

referente a lo del boton invisible alrededor no entiendo su función...

espero te sirva este codigo y nos cuentas...

Por gabynufe

Claber

446 de clabLevel



 

México, D.F.

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.