AS3 0物件複製

2021-06-18 18:47:47 字數 1501 閱讀 2724

一、拷貝的分類

有兩種,一種是淺拷貝,還有就是深拷貝。淺拷貝拷貝只是引用,會影響被拷貝的資料。例如陣列的

slice方法返回的是乙個陣列的淺拷貝,通過改變陣列中的東西會改變原被拷貝資料。

深拷貝複製的源物件的二進位制資料,所以不會影響到原資料的屬性和方法。

物件轉殖可以複製出乙個和已存在物件相同的物件,並且兩個物件沒有關聯。actionscript 3.0中轉殖物件使用的是bytearray類。方法很簡單,如下:

public function clone(obj:object):*

由於複製後返回的型別已不再確定了,所以如果是自定義類,是無法強制轉換的,會出現轉換錯誤。clone方法可以對物件例項進行深度拷貝,這些物件包括系統內建的物件例項、自定義普通物件例項、自定義動態物件例項等等。

但是有值得注意的地方,這個方法可以深度拷貝你的物件,但是它不會一同拷貝類的型別定義。所以,如果查需要拷貝乙個自定義型別例項時,拷貝出的物件將不再是自定義型別,而是object,因此在拷貝自定義型別物件的例項時,不要進行強制型別轉換,否則將會得不到想要的結果。看看下面的例子。

var p:myclass=new myclass();//自定義的類

var myclass:*=clone(p);//複製

在看一種複製方法:

/*   

*   深度拷貝,最好用於普通物件上,不要用於自定義類上

*   obj: 要拷貝的物件

*   return :返回obj的深度拷貝

*/ public static function clone(object:object):object

這個方法可以獲取到相應的型別,但對於displayobject型別物件無法複製完全。對於

soundtransform和transform是無法轉換成功的。所以

displayobject不要用這個方法。

下面是針對displayobject使用的複製方法,複製後雖然有一點差異。資料複製的不是很完美,有可能width屬性小1.2或者旋轉角度大0.54,當著問題不大。

/**    影片剪輯的複製,只要是displayobject都可以

*    target :要複製的影片剪輯

*     @param autoadd if true, adds the duplicate to the display list

*      in which target was located

*    注意:flash 9會有bug

*/public static function duplicatedisplayobject(target:displayobject, autoadd:boolean = false):displayobject

// add to target parent's display list

// if autoadd was provided as true

if (autoadd && target.parent)

return duplicate;}

AS3 0基礎學習筆記 2 物件

as3.0 的口訣 一切皆是物件 感覺堅持唯物論,哈哈 as3.0 拋棄了as2.0 建立物件的繁瑣,建立物件都使用 new來實現,實現起來既輕鬆又簡單。按照筆記 1 的我們建立的 我們開始解決筆記 1 所提出的小部分問題吧 如何去擴充套件程式?讓我們舞台上畫一條線吧。這樣夠簡單吧,思維也能夠容易接...

flash指令碼AS3 0載入網路物件

import flash.display.loader import flash.net.urlrequest var loader loader new loader var req urlrequest new urlrequest loader.x 2 loader.y 2 this.addc...

操作AS3 0中的timmer 物件

在這裡我只想談一下時間間隔函式的變化,在as2中有兩個時間間隔函式,我們最常用的可能就是setinterval 另外還有是settimeout 但在as3中,多了乙個timer類,也是用來進行間隔時間呼叫函式的。與前兩者不同的是,這個函式有一些屬性和方法,可以控制呼叫過程。具體的講,有四個屬性和三個...