代码之家  ›  专栏  ›  技术社区  ›  Kekoa

Actionscript 3.0子类化向量类的最佳选项(Flash Player 10)

  •  3
  • Kekoa  · 技术社区  · 15 年前

    我想利用FP10新的Vector类的所有优点,但它似乎被标记为final。

    我正在Actionscript中进行一些密集的数学处理,并反复处理数字数组。我以前一直在使用我自己的Array子类(我称之为 NumericArray ),并添加了sum()、mean()、add()、multiply()等函数。这非常有效,并允许使用一些干净的OO代码。然而,通过分析,我发现大约95%的处理时间发生在这些对象的函数中。我需要这些阵列具有更高的性能。

    我想使用向量,因为它提供了一些性能增强。我想特别使用 Vector.<Number> . 不幸的是,我不能将向量子类化,因为它被标记为final。

    向量。<数量> ?

    我考虑过转转 向量。<数量> 变量,而不是我的自定义类,只是使用实用函数进行操作,但这不是一个好的OO设计,使用起来会很痛苦,更不用说丑陋了。

    3 回复  |  直到 15 年前
        1
  •  4
  •   Stiggler    15 年前

    如果添加附加功能不需要访问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
         }
    
         ...
    }
    
        2
  •  1
  •   grapefrukt    15 年前

    避开此问题的一种方法可能是使用 as3ds

        3
  •  1
  •   James James    15 年前

    怎么会出现在这一页上 http://help.adobe.com/en_US/AS3LCR/Flash_10.0/Vector.html

    它说:

    这难道不意味着你可以把向量分为子类吗?

    詹姆斯