2012-01-25 134 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沒有添加這些函數來避免過載的增加。