2012-01-25 1 views
5

Мне нужно немного больше информации из моих точек, поэтому я подумал, что добавлю предыдущий X, предыдущий, чтобы я мог получить deltaX и deltaY. Теперь это отлично работает, если я делаю простой автономный класс.Как правильно расширить класс AS3 Point?

Я думаю, однако, что я хотел бы расширить класс flash.geom.Point, чтобы воспользоваться другими функциями и вычислениями, которые он предлагает.

Итак, я расширил точку и изменил настройки x и y, как мне было нужно. Когда я компилирую, я получаю сообщение об ошибке, что эти сеттеры не помечены для переопределения, когда они должны быть. Поэтому я переопределяю, но потом получаю сообщение об ошибке, которое говорит, что они не переопределяют какую-либо функцию.

Любая подсказка, где я прищурился?

Вот класс:

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, а содержит только общедоступные переменные: public var x : Number и public var y : Number. См. Документацию here.

Поскольку вы не можете переопределять какие-либо общедоступные геттеры или сеттеры, вы не можете обнаружить, когда кто-либо, использующий ваш класс, пишет эти переменные. Что вы можете сделать, это удалить extends Point и добавить переменную экземпляра Point в ваш UpdatablePoint. Затем измените ваши геттеры и сеттеры на x/y от супер. [X/y] до myPointInstance. [X/y].

Если вам нужно предоставить больше функциональности из класса Point, вы можете просто просто обернуть его. То есть Предположим, вы хотите использовать метод «equals» из Point, просто создайте копию этой сигнатуры метода и сделайте ее тело: return myPointInstance.equals(p);

2

Точка не имеет public function set x или public function set y.

Таким образом, вы не можете переопределить их, поскольку они не существуют. Точка очень низкоуровневая, я предполагаю, что Adobe не добавила эти функции, чтобы избежать увеличения перегрузки.

 Смежные вопросы

  • Нет связанных вопросов^_^