Usted forma nativa no puede copiar la mayoría de las clases internas, pero es posible que desee ver a IExternalizable (http://www.adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/flash/utils/IExternalizable.html)
Es el método de serialising objetos utilizados internamente por la AMF. Obliga a tus objetos a crear dos métodos, readExternal y writeExternal. La idea es que writeExternal le permite empaquetar el estado interno de los objetos en un ByteArray, luego se crea una nueva instancia de su clase, y AMF pasará ese ByteArray al método readExternal, donde puede recrear el estado interno de los objetos previos mediante mano. La llamada de los métodos y de instancias se hace todo para usted a través del método (http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/utils/ObjectUtil.html?filter_flex=4.1&filter_flashplayer=10.1&filter_air=2#copy()) ObjectUtil.copy() si está utilizando el SDK de Flex, de lo contrario, la aplicación de copia es de la siguiente manera:
function copy(value:*):*{
var buffer:ByteArray = new ByteArray();
buffer.writeObject(value);
buffer.position = 0;
var result:Object = buffer.readObject();
return result;
}
Como Puede ver aquí, solo los métodos readObject y writeObject de ByteArray que realmente hacen la serialización, no hay una necesidad real para la clase ObjectUtil.
También puede ser necesario registrar un alias de clase para la clase que desea copiar de manera AMF sabe qué objeto de crear, de lo contrario se acaba de obtener genérica por el otro extremo:
registerClassAlias("com.example.ExampleClass", com.example.ExampleClass);
Debe ser notó que no puede haber parámetros requeridos en el Constructor de objetos que desea copiar con este método, y que readObject de ByteArray comprobará el objeto para ver si implementa IExternalizable, de lo contrario solo copiará sus propiedades públicas. Esta es la razón por la cual la mayoría de las clases integradas no podrán copiar.
En el punto de Gráficos de copiado desde el interior de los objetos de visualización, hay algunos métodos que puede utilizar:
A partir del FP 10, Gráficos tiene otro método útil.
public function copyFrom(sourceGraphics:Graphics):void
(http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/Graphics.html#copyFrom())
Así que una vez que haya copiado de su objeto, a continuación, puede copiar manualmente los gráficos más. Simplemente ponga esto en el método copy(). Simplemente verifique si extiende Sprite o MovieClip y luego invoque copyFrom(). Este sería el más fácil de escribir.
Y aquí hay otro método nuevo.
public function drawGraphicsData(graphicsData:Vector.<IGraphicsData>):void
(http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/Graphics.html#drawGraphicsData())
Si se va a almacenar todos los comandos como datos en bruto (incluso JSON ellos, o crear dtos internos), a continuación, escribir los métodos IExternalizable para copiar los comandos al nuevo objeto y repoblar los gráficos usando este método. Esto sería un dolor de escribir, pero significaría que simplemente llama al método copy() y tiene una copia, Graphics y todo, sin ningún código personalizado en el método copy(). También puede llamar dinámicamente a los métodos gráficos en función de los comandos, de modo que pueda hacer que funcione en el FP9 si es necesario. Esto tiene la ventaja adicional de permitirle cambiar los comandos ya que actualmente no es posible. Una vez que escribes en los gráficos, te quedas atascado.
Gracias, fenomas. Muy clarificador – Cambiata
"Los gráficos no son introspectibles en el tiempo de ejecución" verdadero, pero puede copiar Gráficos. Ver mi publicación a continuación. – Joony
Gran respuesta, muy completa: esta respuesta hace que las otras respuestas sean intrincadamente confusas – 1owk3y