你一定見過Flash動畫中傾盆大雨、滿天雪花、繁星點點等特效吧!這些特效就是利用duplicateMovieClip()命令的神奇功能來實現(xiàn)的!
duplicateMovieClip()命令的一般使用形式為:
duplicateMovieClip(目標,新名稱,深度);
其中有三個參數(shù):
target(目標):要復制的電影剪輯的名稱和路徑。
newname(新名稱):是復制后的電影前輯實例名稱。
depth(深度):已經(jīng)復制電影剪輯的堆疊順序編號。每個復制的電影剪輯都必須設(shè)置唯一的深度,否則后來復制的電影剪輯將替換以前的復制的電影剪輯,新復制的電影剪輯總是在原電影剪輯的上方。
在使用時,需要注意以下幾點:
u 復制的影片會保持父級影片原來的所有屬性,所以,原來的影片是靜止的,復制后的影片也靜止,并且一個疊放在另一個上,如果你不給它們設(shè)置不同坐標,你就只能看到編號最大的復制影片,也就看不出是否復制出的效果了。
u 原來的影片在做補間運動,那么復制品也要做同樣的運動。并且無論播放頭在原始影片剪輯(或“父”級)中處于什么位置,復制的影片播放頭始終從第一幀開始。所以,復制品和原影片始終有個時間差,因此,即使你不給復制的影片設(shè)置坐標,你也可以看到復制品在運動。
u 復制影片經(jīng)常要與影片屬性控制(特別是_x,_y,_alpha,_rotation,_xscale,_yscale等屬性)結(jié)合才能更好地發(fā)揮復制效果。
u 復制影片還經(jīng)常都要和循環(huán)語句配合,才能復制多個影片剪輯。
有時候,你需要刪除復制好的影片,那就用removeMovieClip()命令,一般形式為:
removeMovieClip(影片剪輯實例名);
這個命令只有一個參數(shù),那就是復制后的影片剪輯實例名稱。
例如:
for(I=1;I<10;I++){ //變量I從1開始,到9為止,變量每次加1
duplicateMovieClip(”_root.a”,”a”+I,I);
}
上面這段程序代碼對一個名字為a的影片剪輯實例進行復制,復制后的實例名稱為a1,a2,…a9,深度分別為1,2,…9。
那么,在刪除這些復制的影片剪輯實例時,你可以用下面的循環(huán)語句:
for(I=1;I<10;I++){
removeMovieClip(”a”+i);
}
有關(guān)這個復制影片剪輯命令的詳細應(yīng)用請參看本章第四節(jié)的前兩個實例。
在前面,我們不止一次談到MC的路徑,那么什么叫路徑,怎么運用路徑呢?
我們知道,在Flash的場景中有個主時間軸,在場景里可以放置多個MC,每個MC又有它自己的時間軸,每個MC又可以有多個子MC……,就像在我們國家(場境)下有很多個省(MC),每個省下又有許多個市(子MC)……。這樣,在一個Flash的影片中,就會出現(xiàn)層層疊疊的MC,如果你要對其中一個MC進行操作,你就說出MC的位置,也就是要說明MC的路徑。
路徑分絕對路徑和相對路徑,下面我們還是用一個實際例子來進行說明。
假設(shè)在場境里有兩個MC,一個MC的實例名為mx,在mx下有個子MC名為mx1,在mx1的下面還有一個孫MC名為mx2。
另一個MC的實例名為dm,在dm下有個子MC名為dm1,在dm1下還有個孫MC名為dm2。
(1)絕對路徑
不論在那個MC中進行操作,都是從主場景時間軸(用_root表示)出發(fā),到MC,再到MC的子級MC,再到MC的孫級MC…,一層一層地往下尋找。例如下面的操作:
對mx2使用play()的命令操作,應(yīng)使用以下這樣的程序代碼:
_root.mx.mx1.mx2.play();
對dm1使用play()的命令操作,應(yīng)使用以下這樣的程序代碼:
_root.dm.dm1.play();
對mx使用play()的命令操作,應(yīng)使用以下這樣的程序代碼:
_root.mx.play();
(2)相對路徑
在一個MC內(nèi)的父、子、孫關(guān)系中,有時候用相對路徑比較簡單,但是,用相對路徑時,你必須清楚你在哪一級的MC中,你在對哪一級的MC進行操作。我們以上面的mx為例,使用的仍然是play()命令。
在mx1中,對它本身進行操作的程序代碼為:
this.play();
對mx進行操作,因為mx是它的上一級(父級),所以程序代碼為:
_parent.play();
對mx2的操作,因為mx2是它的子級,所以程序代碼為:
this.mx2.play();或者mx2.play();
如果在mx2中對mx用相對路徑操作就比較麻煩了,程序代碼為:
_parent._parent.play(),因為mx是mx2的父級的父級呀。
如果用相對路徑在mx中或者mx內(nèi)的MC,對另一個dm內(nèi)的MC進行操作,就十分麻煩了,我們不推薦這種方法。
從上面的例子中,我們知道,絕對路徑比較好理解,并且用絕對路徑可以不必考慮你是在哪級的MC中進行操作的。直接從主場景時間軸(_root)出發(fā),一層一層的往下找,如果你對路徑的理解不透,建議你就用絕對路徑。用相對路徑就必須清楚操作命令是在哪一級MC寫的,是在對哪一級的MC進行操作,比較熟練后,在一個MC內(nèi)用相對路徑有時候比較簡單。