Mar*_*ney 9 oop actionscript-3
我有一个有各种船型的游戏.我的Ship
类有一个静态数组,其中包含每种类型中的一种.每当我创建一个新的Ship
(除了初始化这个数组时),我想让它成为Ship
我的原型数组中一个现有对象的克隆.
1 - 如何在一个Ship
对象中运行所有属性并将它们分配给第二个Ship
对象?
2 -我怎样才能看到,如果一个属性是一个对象或基本类型像String
或int
?我的Ship
类中的一些对象需要克隆,有些只是需要保持不变的引用.
Jer*_*rth 19
一个选项,可以说是最灵活的选择,是为您需要克隆的每个类定义克隆方法,例如:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
另一种选择是使用ByteArray类克隆对象,如Adobe文档中的此示例:
function clone( source:Object ):*
{
var myBA:ByteArray = new ByteArray();
myBA.writeObject( source );
myBA.position = 0;
return( myBA.readObject() );
}
Run Code Online (Sandbox Code Playgroud)
我已经看到这种方法不能用于克隆自定义类的实例,特别是像Sprites这样的视图类的实例.
另一种方法是describeType
从flash.utils
包中使用.随着describeType
您可以通过对象的属性进行迭代.
下面是一个describeType
用于检查对象属性的示例,该对象是我编写的utils lib的一部分.
至于检查属性的类型,你可以使用describeType
或者你也可以is
像这样使用运算符:
if( myObj is SomeClass )
{
}
if( myObj is OtherClass )
{
}
Run Code Online (Sandbox Code Playgroud)