9

複数の Geometry シェイプを持つ Degrafa Surface を含む Canvas オブジェクトのクローンを作成したいと考えています。

私は単純なアプローチを試みました:

return ObjectUtil.copy(graph_area) as Canvas;

エラーが発生しました:

TypeError: Error #1034: Type Coercion failed: cannot convert Object@63b1b51 to com.degrafa.geometry.Geometry.
TypeError: Error #1034: Type Coercion failed: cannot convert Object@63b1039 to com.degrafa.geometry.Geometry.
TypeError: Error #1009: Cannot access a property or method of a null object reference.
    at mx.core::Container/addChildAt()[C:\autobuild\3.2.0\frameworks\projects\framework\src\mx\core\Container.as:2196]
    at mx.core::Container/addChild()[C:\autobuild\3.2.0\frameworks\projects\framework\src\mx\core\Container.as:2140] ...
4

5 に答える 5

9

必要なものはディープ コピーと呼ばれ、オリジナルと同じ情報で新しいインスタンスを生成します。

私がそれを行う方法を知っている唯一の方法は、次のように ByteArray を使用することです。

private function clone(source:Object):*
{
    var buffer:ByteArray = new ByteArray();
    buffer.writeObject(source);
    buffer.position = 0;
    return buffer.readObject();
}

AS3 には本当に Object.clone() がありません...

于 2009-02-20T09:59:13.393 に答える
8

ObjectUtil

静的メソッドObjectUtil.copy()は、AS3の「Object.clone()」です。

public static function copy(value:Object):Object

指定されたオブジェクトをコピーし、コピーへの参照を返します。コピーは、ネイティブのシリアル化技術を使用して作成されます。これは、コピー中にカスタムシリアル化が尊重されることを意味します。

このメソッドは、コレクションの要素などのデータオブジェクトをコピーするために設計されています。TextInputコントロールなどのUIComponentオブジェクトをコピーするためのものではありません。特定のUIComponentオブジェクトのコピーを作成する場合は、コンポーネントのサブクラスを作成し、clone()メソッドまたは他のメソッドを実装してコピーを実行できます。

于 2010-01-04T19:39:18.393 に答える
1

同じ問題が発生し(作成したNamedEntityインターフェイスの場合)、ここで答えを探しましたが、registerClassAliasメソッド(http://richapps.de/?p=34から取得)を呼び出して機能するようになりました。 。ちょうどそのように:

public static function clone(namedEntity:NamedEntity):NamedEntity {
registerClassAlias('test',ReflectionUtil.classByObject(namedEntity));
var returnObject:NamedEntity = ObjectUtil.copy(namedEntity) as NamedEntity;
}
于 2009-10-17T02:30:07.387 に答える
1

残念ながら、TextArea(別名UIオブジェクト)をまだコピーしていないようです...

public function duplicateObject(sourceObject:*, targetObject:*):void {
    var buffer:ByteArray = new ByteArray();
    buffer.writeObject(sourceObject);
    buffer.position = 0;
    targetObject = buffer.readObject();
}
于 2009-06-02T10:08:52.400 に答える
0

ObjectUtil.copy がキャンバスの複製に機能するとは思わない。フレックスドキュメントによると:

Copy このメソッドは、コレクションの要素などのデータ オブジェクトをコピーするために設計されています。TextInput コントロールなどの UIComponent オブジェクトをコピーするためのものではありません。特定の UIComponent オブジェクトのコピーを作成する場合は、コンポーネントのサブクラスを作成し、 clone() メソッドまたはコピーを実行する他のメソッドを実装できます。

于 2009-05-27T08:49:24.820 に答える