2012-01-25 95 views
5

我需要从我的观点得到更多信息,所以我想我会添加一个previousX,previousY,这样我就可以得到一个deltaX和deltaY。现在,如果我制作一个简单的自包含类,这可以很好地工作。如何正确扩展AS3 Point类?

但是,我认为我想扩展flash.geom.Point类以从其提供的其他函数和计算中受益。

所以我扩展了Point并根据需要修改了x和y setter。当我编译时,我得到一个错误,这些设置器没有标记为应该覆盖。所以我重写,但然后我得到一个错误,说这些不覆盖任何函数。

任何线索,我搞砸了?

这里是类:

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

您是否可以在两种情况下都包含错误的确切文本?有和没有'override'语句。你可能会重写一个额外的函数。 – lunixbochs

回答

5

Point类不是使用get/set-methods实现的,而是仅包含公共变量:public var x : Numberpublic var y : Number。请参阅文档here

既然你不能覆盖任何公共的getters或者setter,当任何人使用你的类写入这些变量时,你都无法检测到。你可以做的是删除extends Point并添加一个Point实例变量到你的UpdatablePoint。然后将x/y的getter和setter从super。[x/y]更改为myPointInstance。[x/y]。

如果您需要公开Point类的更多功能,您可以轻松将其包装。即假设您想使用Point中的'equals'方法,只需创建该方法签名的副本并使其正文包含:return myPointInstance.equals(p);

2

点没有public function set xpublic function set y

所以你不能覆盖它们,因为它们不存在。点是非常低的水平,我的猜测是Adobe没有添加这些函数来避免过载的增加。