2012-01-25 7 views
5

Potrzebuję trochę więcej informacji z moich punktów, więc pomyślałem, że dodam poprzedniX, poprzednio, więc mogę dostać deltaX i deltaY. Teraz działa to dobrze, jeśli utworzę prostą, samodzielną klasę.Jak prawidłowo rozszerzyć klasę AS3 Point?

Myślę jednak, że chciałbym rozszerzyć klasę flash.geom.Point, aby skorzystać z innych funkcji i obliczeń, które oferuje.

Więc wydłużyłem punkt i zmodyfikowałem setery x i y, tak jak potrzebowałem. Podczas kompilacji pojawia się błąd, że te ustawienia nie są oznaczone, aby zastąpić, gdy powinny być. Zastanawiam się, ale wtedy pojawia się błąd, który mówi, że nie zastępują żadnej funkcji.

Jakąkolwiek wskazówkę skasowałem?

Oto klasa:

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

Czy możesz podać dokładny tekst błędów w obu przypadkach? Z i bez instrukcji 'override'. Być może zastępujesz dodatkową funkcję. – lunixbochs

Odpowiedz

5

Klasa Point nie jest zaimplementowana za pomocą metod get/set, a zawiera tylko zmienne publiczne: public var x : Number i public var y : Number. Zobacz dokumentację here.

Ponieważ nie można przesłonić żadnych publicznych programów pobierających ani ustawiających, nie można wykryć, kiedy ktoś używający twojej klasy zapisuje te zmienne. Możesz usunąć zmienną instancji extends Point i dodać zmienną instancji Point do swojego UpdatablePoint. Następnie zmień wartości pobierające i ustawiające na x/y z super. [X/y] na myPointInstance. [X/y].

Jeśli musisz wystawić więcej funkcji z klasy Point, możesz łatwo po prostu ją zawinąć. To znaczy. Załóżmy, że chcesz użyć metody "równy" od Point, po prostu utwórz kopię tej sygnatury metody i wprowadź jej treść: return myPointInstance.equals(p);

2

Punkt nie ma public function set x lub public function set y.

Nie można ich przesłonić, ponieważ nie istnieją. Punkt jest bardzo niski, domyślam się, że Adobe nie dodał tych funkcji, aby uniknąć wzrostu przeciążenia.

Powiązane problemy