setInveral en componentes

estaba haciendo un componente, que tenia que desplegarser por cierto tiempo y luego desaparecer, para lo cual utilizaba setInterval.
A la hora de hacer el intervalID, lo ponia dentro del componente, este me llamaba a la función pero no se quitaba (clearInterval(intervalID)) =(

Leyendo la referencia, vi que se le podian pasar argumentos al setInterval, asi que le pasé el objeto mismo, y todo fué alegría.

ejemplo.
1.hacer un grafico en el escenario ( en mi caso es un círculo )
2.seleccionarlo y presionar F8
3.ponerle nombre y linkageID "clip" (haciendo click en export for AS)
4.seleccionarlo en la librería, boton derecho y click en component definition
5.click en el más de parámetros ( de echo no vamos a ocupar ningún parámetro, pero es para que flash sepa que es un componente xDD)
6.doble click en "clip" en la librería para entrar a editarlo
7.en un layer nuevo poner esto.


#initclip


//declaracion de la clase
clipClass = function (){
  this.init();
}
//clase.prototipo = movieclip
var c = clipClass.prototype = new MovieClip();
//registramos la clase en el objeto.
Object.registerClass("clip",clipClass);
//function fadeOut (desaparece el clip)
c.fadeOut = function (){
  trace("fade " add this._alpha);
  if(this._alpha > 1){
    this._alpha -= (this._alpha/3)
  }else{
    this.removeMovieClip()
  }
}
//evento invocado por el set Interval,
//quita el intervalo, y setea el enterframe a fadeOut
c.hider = function (obj){
  clearInterval(obj.inter);
  obj.onEnterFrame = obj.fadeOut
}
//incializador de la clase.
c.init = function (){
  this.inter = setInterval(this.hider,2000,this);
}
#endinitclip


stop();

8. ahora salimos de la librería y en el primer frame de la linea de tiempo principal poner esto otro.

this.attachMovie("clip","clip1",++i);
stop();

Crtl+enter y listo.

lo que hace es atachar el clip, que permanecerá en el escenario 2 segundos, luego hará fadeOut hasta desaparecer. este temporizador es usando setInterval.

fin del cuento =).
suerT
kada.

1 Comments

Fernando said:

pues... aqui vamos denuevo... aqui hay otra manera de hacerlo... no es muy conocida esta segunda forma ya que macromedia no lo documento bien pero hay una segunda sintaxis para el setInterval y es asi;

setInterval(object, function, interval, arguments);

el object lo puedes apuntar al 'this' y ya no necesitas usar el argumento en la funcion...
algo asi seria:

c.hider = function (){
clearInterval(this.inter);
this.onEnterFrame = this.fadeOut
}

c.init = function (){
this.inter = setInterval(this, "hider", 2000);
}


y pos.. ya.. es lo mismo... :)
ojala macromedia realice buena documentacion para la proxima version de flash, no crees?

Salu2