Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
384 views
in Technique[技术] by (71.8m points)

actionscript 3 - AS3 - Clone an object

I have a game with a variety of ship types. My Ship class has a static array holding one of each of the types in it. Whenever I make a new Ship (other than when initializing this array), I want to make it a clone of one of the existing Ship objects in my prototype array.

1 - How can I run through all the properties in one Ship object and assign them to a second Ship object?

2 - How can I see if a property is an object or a basic type like String or int? Some of the objects in my Ship class need to be cloned, and some are just references that need to stay the same.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

One option, arguably the most agile, would be to define clone methods for each class that you need to clone, such as:

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;
    }
}

Another option is to clone an object by using the ByteArray class like this example from the Adobe documentation:

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

I've seen instances where this approach does not work for cloning instances of custom classes, specifically view classes like Sprites.

Another approach is to use describeType from the flash.utils package. With describeType you can iterate through the properties of an object.

Here is an example of using describeType to inspect the properties of an object that is a part of a utils lib I wrote.

As for checking the type of the property, you can use describeType or you can also use the is operator like this:

if( myObj is SomeClass )
{

}

if( myObj is OtherClass )
{

}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...