Actionscript 3 AS3-克隆对象
我有一个游戏,有各种各样的船型。我的Actionscript 3 AS3-克隆对象,actionscript-3,oop,Actionscript 3,Oop,我有一个游戏,有各种各样的船型。我的Ship类有一个静态数组,其中包含每种类型中的一种。每当我创建一个新的Ship(初始化此数组时除外),我都希望将其作为原型数组中一个现有Ship对象的克隆 1-如何在一个Ship对象中运行所有属性,并将它们分配给第二个Ship对象 2-如何查看属性是对象还是基本类型,如String或int?myShip类中的某些对象需要克隆,而某些对象只是需要保持不变的引用。要遍历一个Ship对象的所有属性并将其分配给另一个对象,请执行以下操作: shipobj1:Ship
Ship
类有一个静态数组,其中包含每种类型中的一种。每当我创建一个新的Ship
(初始化此数组时除外),我都希望将其作为原型数组中一个现有Ship
对象的克隆
1-如何在一个Ship
对象中运行所有属性,并将它们分配给第二个Ship
对象
2-如何查看属性是对象还是基本类型,如
String
或int
?myShip
类中的某些对象需要克隆,而某些对象只是需要保持不变的引用。要遍历一个Ship对象的所有属性并将其分配给另一个对象,请执行以下操作:
shipobj1:Ship = new Ship();
//set values for all shipobj1 properties
shipobj2:Ship = new Ship();
for (item in shipobj2)
item = shipobj1[item];
检查属性值是否是可以使用typeof的对象。这种方法的局限性在于,只返回6种可能的类型:boolean、function、number、object、string和xml。例如,如果你需要知道一个属性是否是数组,你不能用typeof真正做到这一点,因为它实际上会返回“object”,因为“array”不是6个选项中的一个,但是如果你只是想识别简单的类型,比如数字和字符串,而不是其他东西,那么它应该做到:
if(typeof item == "object")
// do whatever with object
else if(typeof item == "string")
// do whatever with string
//etc, etc.
编辑:将变量“var”替换为“item”,因为var是一个保留字。一个选项,可以说是最灵活的,是为需要克隆的每个类定义克隆方法,例如:
class Ship
{
public var prop1:Number;
public var otherClassInstance:OtherClass;
public function clone():Ship
{
var result:Ship = new Ship();
result.prop1 = this.prop1;
result.otherClassInstance = this.otherClassInstance.clone()
}
}
class OtherClass
{
public var prop1:Number;
public function clone():OtherClass
{
var result:OtherClass = new OtherClass();
result.prop1 = this.prop1;
}
}
另一个选项是使用ByteArray类克隆对象,如Adobe文档中的示例所示:
function clone( source:Object ):*
{
var myBA:ByteArray = new ByteArray();
myBA.writeObject( source );
myBA.position = 0;
return( myBA.readObject() );
}
我见过这样的实例,这种方法不适用于克隆自定义类的实例,特别是像sprite这样的视图类
另一种方法是使用flash.utils
包中的DescripteType
。使用describeType
可以迭代对象的属性
下面是一个使用descripbetype
检查作为我编写的文档的一部分的对象的属性的示例
至于检查属性的类型,您可以使用descripbetype
或者您也可以使用is
操作符,如下所示:
if( myObj is SomeClass )
{
}
if( myObj is OtherClass )
{
}
您可以使用is关键字进行更严格的匹配。e、 g.如果(某个东西是数组)我得到了一些语法错误,比如(shipobj2中的var)var=shipobj1[var]代码>这可能是因为“var”是一个保留字,或者是因为您在for语句中调用它obj2,而在循环中调用它obj1。我在示例代码中使用“var”作为变量名的缺点是将其替换为“item”。我想我将不得不执行您的第一个建议,尽管如果我在类中添加新变量,我每次都要给clone()添加新行。这也有好处。如果没有设置值,您可能希望设置默认值,或者您可能希望克隆一些道具而不是其他道具。使用describeType的自动化方法不会太灵活。