Actionscript 3.0 Лучший вариант для создания подклассов векторного класса (Flash Player 10) - PullRequest
3 голосов
/ 08 мая 2009

Я бы хотел воспользоваться всеми преимуществами нового класса Vector для FP10, но, похоже, он помечен как окончательный.

Я выполняю некоторую интенсивную математическую обработку в Actionscript и неоднократно обрабатываю массивы чисел. Ранее я использовал свой собственный подкласс Array (я называю это NumericArray) с добавленными функциями, такими как sum (), mean (), add (), multiply () и т. Д. Это работает очень хорошо и допускает некоторые чистый код ОО. Тем не менее, путем профилирования я обнаружил, что около 95% моего времени обработки приходится на функции этих объектов. Мне нужно больше производительности из этих массивов.

Я хочу использовать Vector, так как он обеспечивает некоторые улучшения производительности. Я хочу специально использовать Vector.<Number>. К сожалению, я не могу создать подкласс Vector, поскольку он помечен как окончательный.

Каков наилучший и самый чистый способ подражать тому, что я ранее делал с подклассом Array, в Vector.<Number>?

Я думал о том, чтобы передать переменные Vector.<Number> вместо моего пользовательского класса и просто использовать служебные функции для манипулирования, но это не очень хороший ОО-проект и будет неудобно, не говоря уже об уродстве.

Ответы [ 3 ]

4 голосов
/ 08 мая 2009

Если добавление вашей дополнительной функциональности не требует доступа к защищенным свойствам / методам Vector, вы можете создать класс-оболочку для Vector. Что-то в этом роде?

import flash.utils.Proxy;
import flash.utils.flash_proxy;

use namespace flash_proxy;

public class NumericVector extends Proxy
{
     private var vector:Vector.<Number>;

     public function NumericVector(vector:Vector.<Number> = null)
     {
          if(vector == null)
          {
              this.vector = new Vector.<Number>();
          }
          else
          {
              this.vector = vector;
          }
     }

     override flash_proxy function nextName(index:int):String 
     {
         return vector[index - 1].toString();
     }

     override flash_proxy function nextNameIndex(index:int):int
     {
         // implementation
     }

     public function sum():Number
     {
         // do whatever you intend to do
     }

     ...
}
1 голос
/ 16 августа 2009

Как зайти на эту страницу http://help.adobe.com/en_US/AS3LCR/Flash_10.0/Vector.html

это говорит: «Примечание. Чтобы переопределить этот метод в подклассе Vector, используйте для параметров параметры ..., как показано в следующем примере:«

??

не означает ли это, что вы можете создать подкласс Vector?

Джеймс

1 голос
/ 08 мая 2009

Чтобы обойти эту проблему, можно использовать as3ds (сокращение от ActionScript 3 структуры данных). Могут ли они быть быстрее, чем при использовании Vector, я не уверен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...