2012-01-25 15 views
5

que vienen a necesitar un poco más de información de mis puntos, así que pensé que me gustaría añadir un previousX, previousy para que pueda obtener una deltaX y deltaY. Ahora, esto funciona bien si hago una clase autónoma simple.¿Cómo extiendo correctamente la clase AS3 Point?

Creo, sin embargo, que me gustaría extender la clase flash.geom.Point para beneficiarse de las otras funciones y cálculos que ofrece.

Así que amplié Point y modifiqué los adaptadores xey como lo necesitaba. Cuando compilo, me sale un error de que estos setters no están marcados para sobrescribir cuando deberían. Así que anulo, pero luego aparece un error que dice que estos no anulan ninguna función.

¿Alguna pista donde jodí?

Aquí está la clase:

package net.jansensan.geom 
{ 
    import flash.geom.Point; 

    /** 
    * @author Mat Janson Blanchet 
    */ 
    public class UpdatablePoint extends Point 
    { 
     private var _previousX : Number = 0; 
     private var _previousY : Number = 0; 
     private var _deltaX : Number = 0; 
     private var _deltaY : Number = 0; 

     // ******************************************************************** 
     //       [ PUBLIC METHODS ] 
     // ******************************************************************** 

     public function UpdatablePoint(x:Number=0, y:Number=0) 
     { 
      super(x, y); 
     } 

     override public function toString():String 
     { 
      return "(x=" + super.x + ", y=" + super.y + ", previousX=" + 
       _previousX + ", previousY=" + _previousY + ", deltaX=" + 
       _deltaX + ", deltaY=" + _deltaY + ")"; 
     } 

     // ******************************************************************** 
     //      [ GETTERS/SETTERS ] 
     // ******************************************************************** 

     override public function set x(x:Number):void 
     { 
      _previousX = super.x; 
      super.x = x; 
      _deltaX = super.x - _previousX; 
     } 

     override public function set y(y:Number):void 
     { 
      _previousY = super.y; 
      super.y = y; 
      _deltaY = super.y - _previousY; 
     } 

     public function get previousX():Number 
     { 
      return _previousX; 
     } 

     public function get previousY():Number 
     { 
      return _previousY; 
     } 

     public function get deltaX():Number 
     { 
      return _deltaX; 
     } 

     public function get deltaY():Number 
     { 
      return _deltaY; 
     } 
    } 
} 
+0

¿Puede incluir el texto exacto de los errores en ambos casos? Con y sin las declaraciones 'anular'. Es posible que esté anulando una función adicional. – lunixbochs

Respuesta

5

La clase Point no se implementa mediante get/set-methods, sino que contiene solo variables públicas: public var x : Number y public var y : Number. Consulte la documentación here.

Como no puede anular ningún captador o instalador público, no puede detectar cuando alguien que utiliza su clase está escribiendo en estas variables. Lo que puede hacer es quitar el extends Point y añadir una variable Point instancia a su UpdatablePoint. A continuación, cambiar sus captadores y definidores de x/y desde super. [X/y] a myPointInstance. [X/y].

Si necesita exponer más funcionalidades de la clase Point, puede simplemente envolverlo. Es decir. Supongamos que desea utilizar el método 'iguales' de Punto, simplemente cree una copia de esa firma de método y haga que su cuerpo contenga: return myPointInstance.equals(p);

2

Point no tiene public function set x o public function set y.

Así que no puede anularlos ya que no existen. Punto es de muy bajo nivel, creo que ha de ser que Adobe no añadir estas funciones para evitar el aumento de la sobrecarga.

Cuestiones relacionadas