Non è possibile copiare nativamente la maggior parte delle classi interne, ma si potrebbe desiderare di guardare a IExternalizable (http://www.adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/flash/utils/IExternalizable.html)
è il metodo di serializzazione oggetti utilizzati internamente da AMF. Costringe i tuoi oggetti a creare due metodi, readExternal e writeExternal. L'idea è che writeExternal ti permette di impacchettare lo stato interno degli oggetti in un ByteArray, quindi viene creata una nuova istanza della classe, e AMF passerà quel ByteArray al metodo readExternal, dove puoi ricreare lo stato interno degli oggetti precedenti mano. La chiamata dei metodi e di istanze è tutto fatto per voi attraverso l'ObjectUtil.copy() il metodo (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()) se si sta utilizzando Flex SDK, in caso contrario, l'applicazione copia è la seguente:
function copy(value:*):*{
var buffer:ByteArray = new ByteArray();
buffer.writeObject(value);
buffer.position = 0;
var result:Object = buffer.readObject();
return result;
}
Come si puoi vedere qui, sono solo i metodi readObject e writeObject di ByteArray che eseguono effettivamente la serializzazione, non c'è una reale necessità per la classe ObjectUtil.
Potrebbe anche essere necessario registrare un alias di classe per la classe che si desidera copiare in modo AMF sa quello oggetto per creare, altrimenti sarà solo ottenere oggetti generici fuori l'altra estremità:
registerClassAlias("com.example.ExampleClass", com.example.ExampleClass);
Dovrebbe essere ha osservato che non è possibile avere parametri obbligatori nel Costruttore di oggetti che si desidera copiare con questo metodo e che readObject di ByteArray controllerà l'oggetto per vedere se implementa IExternalizable, altrimenti copierà solo le sue proprietà pubbliche. Questo è il motivo per cui la maggior parte delle classi incorporate non riuscirà a copiare.
Sul punto di Grafica di copiatura dall'interno Mostra oggetti, ci sono alcuni metodi che è possibile utilizzare:
Come di FP 10, Graphics ha un altro metodo utile.
public function copyFrom(sourceGraphics:Graphics):void
(http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/Graphics.html#copyFrom())
Quindi una volta che hai copiato l'oggetto, è possibile copiare manualmente la grafica sopra. Basta inserire questo nel metodo copy(). Basta controllare se estende Sprite o MovieClip e quindi chiama copyFrom(). Questo sarebbe il modo più semplice per scrivere.
E qui c'è un altro nuovo metodo.
public function drawGraphicsData(graphicsData:Vector.<IGraphicsData>):void
(http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/Graphics.html#drawGraphicsData())
Se si dovesse memorizzare tutti i comandi come dati grezzi (anche loro JSON, o creare DTOs interni), quindi scrivere i metodi IExternalizable per copiare i comandi al nuovo oggetto e ripopolare la grafica usando questo metodo. Questo sarebbe un problema da scrivere, ma vorrebbe dire che basta chiamare il metodo copy() e si dispone di una copia, grafica e tutto, senza alcun codice personalizzato nel metodo copy(). È anche possibile chiamare i metodi grafici in modo dinamico in base ai comandi, in modo da poter far funzionare questo in FP9, se necessario. Questo ha il vantaggio in più di permetterti di cambiare i comandi come al momento non è possibile. Una volta che scrivi alla grafica, sei bloccato con esso.
Grazie, fenomas. Molto chiarificante! – Cambiata
"La grafica non è introspectable in fase di esecuzione" true, ma è possibile copiare grafica. Vedi il mio post qui sotto. – Joony
Ottima risposta, molto completa - questa risposta rende le altre risposte intrinsecamente confuse – 1owk3y