Comunidad de diseño web y desarrollo en internet online

Problema con funcion de clase personalizada i clips cargados

Citar            
MensajeEscrito el 30 Sep 2008 05:25 pm
Buenas, tengo una película flash que usa una clase personalizada. Hay una función Borrar de dicha clase que borra un TextField que previamente ha sido creado dinamicamente al crear una instancia de mi clase; además esta función devuelve True si la referencia a el TextField era vàlida o False si no lo era.

Cuando pruebo esta película, todo funciona a la perfección. Pero cuando cargo esta película desde otro swf con MovieClipLoader, al iniciarse la instancia de mi clase, se crea correctamente el TextField, pero la función Borrar no se ejecuta. Hago un trace para ver lo que devuelve, y devuelve undefined.



Que es lo que pasa?



Muchas gracias

Por ferranpujol

177 de clabLevel



 

Mataró (Barcelona), España

opera
Citar            
MensajeEscrito el 30 Sep 2008 05:43 pm
Seguramente la referencia que le pasas como argumento es incorrecta

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 30 Sep 2008 05:45 pm
Nono, la funcion no tiene argumentos, la referncia la saca de una variable de la clase que se crea al iniciar una instancia.

Por ferranpujol

177 de clabLevel



 

Mataró (Barcelona), España

msie7
Citar            
MensajeEscrito el 30 Sep 2008 06:02 pm
Si da undefined, la propiedad de la clase no es una referencia válida. Dices que apunta a un TextField que si se está creando, con lo cual en algún punto entre la creación y el borrar se sobreescribe o algo se borra (el TextField o la referencia misma) La diferencia entre instanciarlo autónomamente y cargarlo en otra peli es el scope por fuera de la clase, revisa el code a ver si encuentras alguna pista

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 30 Sep 2008 06:06 pm

solisarg escribió:

La diferencia entre instanciarlo autónomamente y cargarlo en otra peli es el scope por fuera de la clase, revisa el code a ver si encuentras alguna pista


Esto me suena a chino :oops:

Por ferranpujol

177 de clabLevel



 

Mataró (Barcelona), España

msie7
Citar            
MensajeEscrito el 30 Sep 2008 06:09 pm
Es muy simple. Una referencia "externa" (o no encapsulada) es cuando haces referencia a algo externo a tu clase, que puede cambiar de lugar si el contexto varía, una referencia del tipo:

root.algo
parent.parent.otraInstancia
etc

No debería pasar, pero a veces se cuela. Si no lo ves, postea las partes relevantes de tu clase

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 30 Sep 2008 06:17 pm
Bueno, como es relativamente corta, la pongo, es para crear tooltips en un momento:

Código :

class tooltip {
   private var hit:Boolean = new Boolean (false);
   public var follow:Boolean = new Boolean (false);
   public var fadeVelo:Number = new Number (20);
   private var embed:Boolean = new Boolean ();
   private var id:Number = new Number ();
   private var target:MovieClip;
   private var otarget:MovieClip;
   private var coords:Object = new Object ();
   function tooltip (tg:MovieClip, tx:String, ht:Boolean, mu:Boolean, width:Number, style:TextFormat, eb:Boolean, bk:Boolean, color, bo:Boolean, boc) {
      target = tg._parent;
      otarget = tg;
      target.createTextField (otarget._name + "_tooltip",target.getNextHighestDepth (),0,0,width,1);
      target[otarget._name + "_tooltip"]._visible = false;
      target[otarget._name + "_tooltip"].background = bk;
      target[otarget._name + "_tooltip"].backgroundColor = color;
      target[otarget._name + "_tooltip"].embedFonts = eb;
      embed = eb;
      if (embed == true) {
         target[otarget._name + "_tooltip"]._alpha = 0;
      }
      if (bo == true) {
         target[otarget._name + "_tooltip"].border = true;
         target[otarget._name + "_tooltip"].borderColor = boc;
      } else {
         target[otarget._name + "_tooltip"].border = false;
      }
      target[otarget._name + "_tooltip"].selectable = false;
      target[otarget._name + "_tooltip"].autoSize = "left";
      target[otarget._name + "_tooltip"].multiline = mu;
      if (mu == true) {
         target[otarget._name + "_tooltip"].wordWrap = true;
      } else {
         target[otarget._name + "_tooltip"].wordWrap = false;
      }
      target[otarget._name + "_tooltip"].html = ht;
      if (ht == true) {
         target[otarget._name + "_tooltip"].htmlText = tx;
      } else {
         target[otarget._name + "_tooltip"].text = tx;
      }
      target[otarget._name + "_tooltip"].setTextFormat (0,target[otarget._name + "_tooltip"].length,style);
      id = setInterval (this, "period", 30);
   }
   public function removeTooltip () {
      if (embed) {
         period = function () {
            target[otarget._name + "_tooltip"]._alpha -= fadeVelo;
            if (target[otarget._name + "_tooltip"]._alpha <= 0) {
               target[otarget._name + "_tooltip"].removeTextField ();
               clearInterval (id);
            }
         };
      }
      return target[otarget._name + "_tooltip"] != undefined;
   }
   private function period () {
      if (otarget.hitTest (_xmouse, _ymouse, false)) {
         target[otarget._name + "_tooltip"]._visible = true;
         if (embed == true) {
            if (target[otarget._name + "_tooltip"]._alpha < 101 - fadeVelo) {
               target[otarget._name + "_tooltip"]._alpha += fadeVelo;
            }
         }
         if (follow == true) {
            hit = true;
            target[otarget._name + "_tooltip"]._x = target._xmouse;
            target[otarget._name + "_tooltip"]._y = target._ymouse + 25;

         } else {
            if (hit == false) {
               hit = true;
               target[otarget._name + "_tooltip"]._x = target._xmouse;
               target[otarget._name + "_tooltip"]._y = target._ymouse + 25;
            }
         }
         coords = {x:target[otarget._name + "_tooltip"]._x + target[otarget._name + "_tooltip"]._width, y:target[otarget._name + "_tooltip"]._y + target[otarget._name + "_tooltip"]._height};
         target.localToGlobal (coords);
         if (coords.x > Stage.width) {
            target[otarget._name + "_tooltip"]._x = target._xmouse - target[otarget._name + "_tooltip"]._width;
         }
         if (coords.y > Stage.height) {

            target[otarget._name + "_tooltip"]._y = target._ymouse - target[otarget._name + "_tooltip"]._height;
         }
      } else {
         if (embed == true) {
            if (target[otarget._name + "_tooltip"]._alpha > fadeVelo - 1) {
               target[otarget._name + "_tooltip"]._alpha -= fadeVelo;
            } else {
               target[otarget._name + "_tooltip"]._visible = false;
            }
         } else {
            target[otarget._name + "_tooltip"]._visible = false;
         }
         hit = false;
      }
   }
}


Bueno, las cosas que hay que aclarar: otarget viene de un argumento donde se le pasa el objeto sobre el que va a funcionar el tooltip. Target guarda un referencia al objeto contenedro de otarget, donde se crea el cmapo de texto (soy consciente de que no se puede usar esta clase para hacer un tooltip de _root, pero no es el caso).
La funcion removeTooltip, si las fuentes embebidas estan activadas hace un fade con _alpha y luego borra la instancia de TextField. Y aqui es donde supongo que falla, o nose

Por ferranpujol

177 de clabLevel



 

Mataró (Barcelona), España

msie7
Citar            
MensajeEscrito el 30 Sep 2008 06:33 pm
Uff, me lo temía ... es que yo con mas de 10 líneas me pierdo. Pero a bote pronto veo esto en el constructor:

target = tg._parent;

Esto es claramente un espacio ajeno a la clase, ¿es una referencia válidad dentro del contexto del MovieClipLoader? Sobre todo pensando que usas una función anónima en removeTooltip

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 01 Oct 2008 03:52 pm
mmm, bueno, me he vuelto a perder. El caso es que no entiendo como, al inicar hoy flash i probar, si funcionava. La verdad es que no lo entiendo!

Gracias Igualemnte !

Por ferranpujol

177 de clabLevel



 

Mataró (Barcelona), España

msie7

 

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