Comunidad de diseño web y desarrollo en internet online

Clase controladora de Mc - falla despues de una funcion

Citar            
MensajeEscrito el 09 Jul 2007 05:43 pm
Buenas, el caso es que tengo una clase que controla la posicion, el tamaño y otras cosas de varios MovieClips. Todo funciona correctamente hasta que a través de una función cambio el valor de una variable, a partir de ahí todo empieza a ir raro:
El problema esta en uqe una vaez se ejecuta la función closeActive() (al pulsar el boton x de una ventana) las transparencias ya no reaccionan y el cambio de profundidades tampoco.
Aqui les pongo el codigo de la calse

Código :

class window {
   private var velo:Number = new Number (3);
   private var clipsNum:Number = new Number ();
   private var clips:Array = new Array ();
   private var inix:Array = new Array ();
   private var iniy:Array = new Array ();
   private var active:MovieClip = null;
   private var interval:Number = new Number ();
   private var mouse:Object = new Object ();
   function window () {
      clipsNum = arguments.length;
      active = arguments[0];
      for (var i:Number = 0; i < arguments.length; i++) {
         arguments[i]._xscale = 0;
         arguments[i]._yscale = 0;
         arguments[i]._alpha = 50;
         clips[i] = arguments[i];
         inix[i] = arguments[i]._x;
         iniy[i] = arguments[i]._y;
      }
      interval = setInterval (this, "period", 30);
   }
   function getVelo () {
      return velo;
   }
   function setVelo (veloTarget:Number) {
      velo = veloTarget;
   }
   function getActive () {
      return active;
   }
   function setActive (target:MovieClip) {
      active.swapDepths (target);
      active = target;
   }
   function closeActive () {
      active = null;
   }
   function getWindowsNum () {
      return clipsNum;
   }
   private function period () {
      for (var i = 0; i < clipsNum; i++) {
         if (clips[i] == active) {
            clips[i]._x += (Stage.width / 2 - clips[i]._x) / velo;
            clips[i]._y += (Stage.height / 2 - clips[i]._y) / velo;
            clips[i]._xscale += (100 - clips[i]._xscale) / velo;
            clips[i]._yscale += (100 - clips[i]._yscale) / velo;
            clips[i]._alpha += (100 - clips[i]._alpha) / velo;
         } else {
            clips[i]._x += (inix[i] - clips[i]._x) / velo;
            clips[i]._y += (iniy[i] - clips[i]._y) / velo;
            clips[i]._xscale += (50 - clips[i]._xscale) / velo;
            clips[i]._yscale += (50 - clips[i]._yscale) / velo;
            clips[i]._alpha += (50 - clips[i]._alpha) / velo;
         }
      }
   }
}

i aqui el codigo del swf

Código :

var w:window = new window (principal, bio, porto, contacte, funbox);
w.setVelo (5);
with (principal) {
   swapDepths (5);
   xx.onPress = function () {
      _root.w.closeActive ();
   };
}
with (bio) {
   swapDepths (4);
   xx.onPress = function () {
      _root.w.closeActive ();
   };
}
with (porto) {
   swapDepths (3);
   xx.onPress = function () {
      _root.w.closeActive ();
   };
}
with (contacte) {
   swapDepths (2);
   xx.onPress = function () {
      _root.w.closeActive ();
   };
}
with (funbox) {
   swapDepths (1);
   xx.onPress = function () {
      _root.w.closeActive ();
   };
}
mouse = new Object ();
function onMouse (target:MovieClip) {
   with (target) {
      if (active != this && hitTest (_root._xmouse, _root._ymouse, true) && !w.getActive ().hitTest (_root._xmouse, _root._ymouse, true)) {
         w.setActive (target);
      }
   }
}
mouse.onMouseDown = function () {
   onMouse (getInstanceAtDepth (5));
   onMouse (getInstanceAtDepth (4));
   onMouse (getInstanceAtDepth (3));
   onMouse (getInstanceAtDepth (2));
   onMouse (getInstanceAtDepth (1));
};
Mouse.addListener (mouse);

Y aquí les dejo un swf para que vean que es lo que pasa

Espero me puedan ayudar, muchas gracias ;)

Por ferranpujol

177 de clabLevel



 

Mataró (Barcelona), España

msie
Citar            
MensajeEscrito el 10 Jul 2007 11:10 am
Pregunta en el forode as!

Por N

36 de clabLevel



Genero:Masculino  

Buenos Aires, Argentina

firefox
Citar            
MensajeEscrito el 10 Jul 2007 04:49 pm
Pero si es este!!!!

Por ferranpujol

177 de clabLevel



 

Mataró (Barcelona), España

msie
Citar            
MensajeEscrito el 10 Jul 2007 06:07 pm
Lo que pasa es que con esa bolsa en la cabeza no puede ver bien XD

Por HernanRivas

Claber

3416 de clabLevel

26 tutoriales

 

Argentina

firefox
Citar            
MensajeEscrito el 11 Jul 2007 04:00 pm
Hombre Hernan, ya que te pones podrias ayudarme...encima que te atraigo avatares graciosos...:(

Por ferranpujol

177 de clabLevel



 

Mataró (Barcelona), España

msie
Citar            
MensajeEscrito el 13 Jul 2007 03:26 pm
Jajaj, el error es re boludo.... me acabo de dar cuenta. Después de comerme la cabeza durante 15 minutos noté que:

La transparencia si funciona!!!


Lo que pasa es que no cambia la profundidad de los MCs. Juas! si en lugar de tener las ventanitas todas blancas, les das distintos colores, vas a entender a qué me refiero.

Por HernanRivas

Claber

3416 de clabLevel

26 tutoriales

 

Argentina

firefox
Citar            
MensajeEscrito el 13 Jul 2007 04:38 pm

ferranpujol escribió:


El problema esta en uqe una vaez se ejecuta la función closeActive() (al pulsar el boton x de una ventana) las transparencias ya no reaccionan y el cambio de profundidades tampoco.

Hombre Hernan, eso ya lo sabia, yo lo que pido es si alguien encuentra la causa de ese problema...
Gracias de todas formas por tus 15 minutos ;)

Por ferranpujol

177 de clabLevel



 

Mataró (Barcelona), España

msie
Citar            
MensajeEscrito el 13 Jul 2007 07:36 pm
Lo que digo es que la transparencia no falla.

Pensé que con lo anterior que dije ibas a encontrar el problema en seguida. Cambiá ésto:

Código :

function setActive (target:MovieClip) {
      active.swapDepths (target);
      active = target;
   }
Por:

Código :

function setActive (target:MovieClip) {

      active = target;
      active.swapDepths (_root.getNextHighestDepth ());
   }
El error era que en el momento en el que hacías el swapDepths, active era null (así lo definís en la función closeActive)

Por HernanRivas

Claber

3416 de clabLevel

26 tutoriales

 

Argentina

firefox
Citar            
MensajeEscrito el 13 Jul 2007 07:57 pm
Umm....claro que inutil :oops: ...leí demasiado rapido....Gracias ;)

Aunque al final en vez de hacer swapDepths con _root.getHighestDepth hice esto:

Declaré una nueva variable:

Código :

private var lastActive:MovieClip = null;

Cambié esto

Código :

function setActive (target:MovieClip) {
      active = target;
      active.swapDepths (_root.getNextHighestDepth ());
   }

por esto

Código :

function setActive (target:MovieClip) {
      if (active == null) {
         target.swapDepths (lastActive);
      } else {
         target.swapDepths (active);
      }
      active = target;
   }

y esto

Código :

function closeActive () {
      active = null;
   }
por esto

Código :

function closeActive () {
      lastActive = active;
      active = null;
   }


Bueno, cuando termine quizás haga un tip o un tutorial, la clase será bastante más flexible...
Gracias Hernan ;)

Por ferranpujol

177 de clabLevel



 

Mataró (Barcelona), España

msie
Citar            
MensajeEscrito el 13 Jul 2007 08:03 pm
No hay de qué. La verdad, pensé en decirte algo así como lastActive, pero no creí que fuera necesario.

Por cierto, en lugar de declarar active como null, podés declararla como false, entonces:

Código :

if (active == null) {
}
// Lo podés reemplazar por:
if (!active) {
}

Por HernanRivas

Claber

3416 de clabLevel

26 tutoriales

 

Argentina

firefox
Citar            
MensajeEscrito el 13 Jul 2007 08:10 pm
Es que si los movieclips a controlar no están en _root, tendriá que poner un argumento más a la función constructora para definir el nivel en el que están los clips, con su correspondiente variable dentro de la clase. Y para eso me ahorro el argumento y lo hago con lastActive. Lo que me dices tu ¿solo serviria para acortar la condicional? Porque prefiero tenerlo a == false (o null en este caso), ya me acostumbré de un principio a hacerlo así y ahora me es más cómodo a la hora de ver el código y tampoco es que sea un gran recorte de código...

Por ferranpujol

177 de clabLevel



 

Mataró (Barcelona), España

msie
Citar            
MensajeEscrito el 13 Jul 2007 08:21 pm
Puede ser, pasa que en muchos casos conviene por lo de tener valores booleanos.

Pero en este caso particular, es lo mismo.

Por HernanRivas

Claber

3416 de clabLevel

26 tutoriales

 

Argentina

firefox

 

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