tutorial - ActionScript 3.0 La mejor opción para clasificar clases vectoriales(Flash Player 10)
sintaxis actionscript (3)
¿Cómo es esta página http://help.adobe.com/en_US/AS3LCR/Flash_10.0/Vector.html
dice: "Nota: Para anular este método en una subclase de Vector, use ... args para los parámetros, como muestra este ejemplo:"
??
¿eso no implica que puedas subclasificar un Vector?
James
Me gustaría aprovechar todas las bondades de la nueva clase Vector para FP10, pero parece que está marcada como final.
Estoy haciendo un procesamiento matemático intensivo en Actionscript, y proceso repetidamente las matrices de Números. Anteriormente he estado usando mi propia subclase de Array (lo llamo NumericArray
), con funciones adicionales como sum (), mean (), add (), multiply (), etc. Esto funciona muy bien y permite algunos OO limpios código. Sin embargo, estoy descubriendo a través del perfilado que aproximadamente el 95% de mi tiempo de procesamiento ocurre en las funciones de estos objetos. Necesito más rendimiento de estas matrices.
Quiero usar un Vector, ya que proporciona algunas mejoras de rendimiento. Quiero usar específicamente un Vector.<Number>
. Desafortunadamente, no puedo subclasificar Vector ya que está marcado como final.
¿Cuál es la mejor y más limpia forma de imitar lo que estaba haciendo previamente con una subclase de Matriz, a un Vector.<Number>
?
He pensado en pasar variables Vector.<Number>
lugar de mi clase personalizada y simplemente usar funciones de utilidad para manipular, pero este diseño de OO no es bueno y me resultará difícil usarlo, sin mencionar feo.
Si agregar su funcionalidad adicional no requiere acceso a propiedades / métodos protegidos de Vector, puede crear una clase contenedora para Vector. Algo en esta línea?
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
}
...
}
Una forma de eludir este problema podría ser utilizar as3ds (abreviatura de actionscript 3 estructuras de datos). Si pueden ser más rápidos que usar Vector, no estoy seguro.