这是我想完全克隆的载体(意思是如果我改变克隆的载体,它不会影响原始载体)。
var vector:Vector.<Path_Tiles> = new Vector.<Path_Tiles>();
vector = path_finder.Find_Path(Gird.TILE_SET, start, end, R_G_B, SCAREDNESS);// return a vector of path_tiles in order
我想把它放到这个载体中
var vector2:Vector.<Path_Tiles> = clone(vector);
和克隆方法是这个(我在网站上找到了这个方法,所以我不完全理解它)
public function clone(source:Object):*
{
var myBA:ByteArray = new ByteArray();
myBA.writeObject(source);
myBA.position = 0;
return(myBA.readObject());
}
但是我收到了这个错误:“[Fault] exception,information = TypeError:Error#1034:Type Coercion failed:无法将 AS3 .vec :: Vector。@ 85973d1转换为 AS3 .vec.Vector ..“
如何将Path_Tiles转换为对象?
答案 0 :(得分:1)
确保您的Path_Tiles
课程已registered:
flash.net.registerClassAlias("tld.domain.package.Path_Tiles", Path_Tiles);
然后,您可以通过将数据序列化为ByteArray
来复制:
var tiles:Vector.<Path_Tiles>;
var tilesCloned:Vector.<Path_Tiles>;
var byteArray = new ByteArray();
byteArray.writeObject(tiles);
byteArray.position = 0;
tilesCloned = byteArray.readObject() as Vector.<Path_Tiles>;
使用readObject()
关键字将Vector.<Path_Tiles>
反序列化转换为as
。
序列化对象的构造函数必须接受默认参数。
要把这些放在一起,说这是你的Path_Tiles
课程:
<强> Path_Tiles.as 强>
package
{
public class Path_Tiles
{
public function Path_Tiles(property1:String=null, property2:int=undefined) {
this.property1 = property1;
this.property2 = property2;
}
public var property1:String;
public var property2:int;
}
}
这是您的主要课程,展示了深入克隆Path_Tiles
集合的示例:
<强> Main.as 强>
package
{
import flash.display.Sprite;
import flash.net.registerClassAlias;
import flash.utils.ByteArray;
public class Main extends Sprite
{
public function Main() {
super();
var source:Vector.<Path_Tiles> = new <Path_Tiles>[
new Path_Tiles("Hello", 1),
new Path_Tiles("World", 2)
];
var cloned:Vector.<Path_Tiles> = clone(source);
}
public function clone(source:Vector.<Path_Tiles>):Vector.<Path_Tiles> {
flash.net.registerClassAlias("Path_Tiles", Path_Tiles);
var byteArray = new ByteArray();
byteArray.writeObject(source);
byteArray.position = 0;
return byteArray.readObject() as Vector.<Path_Tiles>;
}
}
}
最后,我们可以看到对象被深层复制;由记忆地址确认: