Comunidad de diseño web y desarrollo en internet online

setInterval en una clase

Citar            
MensajeEscrito el 16 Dic 2005 07:21 pm
Si metes un setInterval dentro de na clase, ¿cómo se llama el this de la clase?¿cómo se puede hacer referencia a ella?

Código :

class Character{
...
public function mover(where:Point) {
      var speed:Number = this.velocidad;
      var lugar:Point = where;
      var xPos:Number = suj._x;
      var yPos:Number = suj._y;
      var cords:Point = new Point(xPos, yPos);
      var angle:Number = Trig.hallarAngulo(cords, where);
      var mov:Point = Trig.hallarPunto(angle, speed);
      suj._rotation = angle;
      function ff() {
         trace("g");//va bien
         trace(cords);//va bien
         trace(this);//undefined !!!!!!
         if (Point.distance(cords, lugar)>speed) {
            this.suj_x += mov.x;
            this.suj_y += mov.y;
         } else {
            this.suj._x = where.x;
            this.suj._y = where.y;
            onArrive();
            clearInterval(intr);
         }
         cords.x = this.suj._x;
         cords.y = this.suj._y;
      }
      var intr:Number = setInterval(ff, 1000/12);
   }
...
}

Por Zah

BOFH

4290 de clabLevel

27 tutoriales
5 articulos

  Bastard Operators From Hell Editores

Zaragoza, España

firefox
Citar            
MensajeEscrito el 16 Dic 2005 07:42 pm
Diría que es el mismo problema que aquí:

http://www.cristalab.com/foros/viewtopic.php?t=15926

Y se solucionaría del mismo modo:

Código :

class Character{
...
public function mover(where:Point) {
      var characterObj:Character = this;

      var speed:Number = this.velocidad;
      var lugar:Point = where;
      var xPos:Number = suj._x;
      var yPos:Number = suj._y;
      var cords:Point = new Point(xPos, yPos);
      var angle:Number = Trig.hallarAngulo(cords, where);
      var mov:Point = Trig.hallarPunto(angle, speed);
      suj._rotation = angle;
      function ff() {
         trace("g");//va bien
         trace(cords);//va bien
         trace(characterObj);//undefined !!!!!!
         if (Point.distance(cords, lugar)>speed) {
            characterObj.suj_x += mov.x;
            characterObj.suj_y += mov.y;
         } else {
            characterObj.suj._x = where.x;
            characterObj.suj._y = where.y;
            onArrive();
            clearInterval(intr);
         }
         cords.x = characterObj.suj._x;
         cords.y = characterObj.suj._y;
      }
      var intr:Number = setInterval(ff, 1000/12);
   }
...
} 


Creo que se les llama variables de scope...

Salu2

Por Cyril

45 de clabLevel



 

firefox
Citar            
MensajeEscrito el 16 Dic 2005 07:54 pm
Eeer ya lo probé, pero con setInterval no funcionó. Sin embargo pude ver la solución, casi idéntica: crear un parámetro en la función ff que haga referencia a this.
Muchas gracias

Por Zah

BOFH

4290 de clabLevel

27 tutoriales
5 articulos

  Bastard Operators From Hell Editores

Zaragoza, España

firefox
Citar            
MensajeEscrito el 16 Dic 2005 08:08 pm
:D

Por Cyril

45 de clabLevel



 

firefox

 

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