源文件下載
本節知識要點
1、loadMovie("url",target [, method])
"url" :要加載的 SWF 文件或 JPEG 文件的絕對路徑或相對路徑。
使用相對路徑一般應將播放的.swf文件與要加載的.swf文件放在同一文件夾中。絕對 路徑必須有詳細的路徑地址。
target:目標影片剪輯(mc元件)的名稱和路徑。目標影片剪輯將替換為加載的 SWF 文件或圖像。
method 可選參數,一般可以不選。
如果 SWF 文件加載到目標影片剪輯,則可使用該影片剪輯的目標路徑來定位加載的 SWF 文件。加載到目標的 SWF 文件或圖像會繼承目標影片剪輯的位置、旋轉和縮放屬性。加載的圖像或 SWF 文件的左上角與目標影片剪輯的注冊點對齊
2、MovieClip._lockroot
因為用loadMovie()加載的外部文件是加載到一個mc元件上,所以,外部文件中指向場景(_root)的路徑此時應該是指向這個mc元件而不是主文件的場景。使用MovieClip._lockroot可以使加載的文件中的_root仍然是指向原來文件的場景.
3、my_mc.getNextHighestDepth()
返回一個整數,即影片剪輯的下一個可用的深度值
4、switch
創建動作腳本語句的分支結構。像 if 動作一樣,switch 動作測試一個條件,并在條件返回 true 值時執行語句。
5、case
用法:case expression:statements
定義用于 switch 動作的條件。如果 case 關鍵字后的 expression 參數在使用全等 (===) 的情況下等于 switch 動作的 expression 參數,則執行 statements 參數中的語句。
6、 _global 對象
創建全局變量、對象或類。
例題---仿電視的多畫面與畫中畫效果
請看效果:
點擊查看動畫效果<
制作思路:只要在同一場景中使用多個mc,使它們同時載入外部.swf文件或者jpg,那么就可以實現多畫面效果。但是,在多畫面與畫中畫的狀態下,因為各mc載入外部.swf文件時有一個時間差,所以各畫面仿電視的同步播放比較困難。這需要被調入的外部.swf文件和主場景文件的配合。
我們打開外部文件“111.fla”文件,AS腳本為:
1、在幀上的腳本
第 1 幀:
gotoAndPlay(x);//這個x是主場景中設置的全局變量;
最后1幀:
x=1;//設置本地變量x
打開主文件6.8.fla,在這個源文件上的腳本如下:
第 1 幀 :
stop();
swf1 = "111.swf";//設置變量swf1來表示外部.swf文件
loadMovie(swf1, e); //在目標元件e上調入swf1
e._x = 125; //設置目標元件e的坐標(即調入swf1的坐標)
e._y = 50;
第 2 幀 :
clip = [a, b, c, d]; //設置數組對象,數組元素為4個目標mc
lp = ["http://img.jbzj.com/UploadFile/2003-10/200310149471524589.swf", "http://img.jbzj.com/UploadFile/2004-4/200441713272664530.swf", "http://img.jbzj.com/UploadFile/2004-3/2004371753525251.swf", "http://img.jbzj.com/UploadFile/2003-11/200311201054795610.swf", "http://img.jbzj.com/UploadFile/2003-11/2003112817413249950.swf","http://cn.flasher123.com/flasher123/mmz/dsxl.swf", "http://img.jbzj.com/UploadFile/2003-10/200310170464214894.swf"];
//設置數組對象,數組元素為網上.swf
_global.x = _root.e._currentframe;
//把目標mc播放的當前幀(即調入外部文件的當前幀)用全局變量x表示;
//下面腳本中使調入外部文件的從全局變量x幀開始播放;
m = getNextHighestDepth();//取得下一個可用的mc的深度;
a.swapDepths(m); //設置mc元件a的深度為下一個可用的mc的深度;
loadMovie(swf1, a); //在目標元件a上調入swf1
a._x = 125; //設置目標元件a的坐標(即調入swf1的坐標)
a._y = 50;
a._xscale = 50; //設置目標元件a的放大系數(即調入swf1的放大系數)
a._yscale = 50;
j = k=0; //設置變量初值
第 3 幀
_global.x=_root.e._currentframe;//與第2幀上的腳本類同
m=getNextHighestDepth()
b.swapDepths(m)
loadMovie(swf1, b);
b._x = 125;
b._y = 250;
b._xscale = 50;
b._yscale = 50;
第 4 幀
_global.x=_root.e._currentframe;//與第2幀上的腳本類同
m=getNextHighestDepth()
c.swapDepths(m)
loadMovie(swf1,c);
c._x = 400;
c._y = 250;
c._xscale = 50;
c._yscale = 50;
第 5 幀
_global.x = _root.e._currentframe;//與第2幀上的腳本類同
m = getNextHighestDepth();
d.swapDepths(m);
loadMovie(swf1, d);
d._x = 400;
d._y = 50;
d._xscale = 50;
d._yscale = 50;
unloadMovie(e); //刪除最開始調入的swf
第 6 幀
e._lockroot = true; //使被選中的元件在調入的外部文件的_root指向本身的主時間軸
loadMovie(lp[k], e); //配合按扭中的mc的變化;
2、在按扭上的腳本
在“多屏幕”按扭上的腳本:
on (release) {
nextFrame();
}
在“單屏”按扭上的腳本:
on (release) {
for (i=0; i<4; i++) {
unloadMovie(clip[i]); //刪去元件a,b,c,d上加載的外部swf文件;
clip[i].swapDepths(-i-1);//降低a,b,c,d的深度,使元件e加載的swf能顯示出來;
clip[i]._alpha = 100; //元件a,b,c,d的透明度有可能降低,這里把恢復它們的透明度
}
nextFrame();//到下一幀停下
}
在“屏幕選擇”按扭上的腳本
on (press) {
txt = ""; //設置文本txt為空
switch (j=j+1) {//創建switch 動作腳本語句的分支結構
case 1 : //如果j==1,就執行
a._alpha = 40; //元件a是透明度為40
break; //跳出switch循環體。以下類同
case 2 :
a._alpha = 100;
b._alpha = 40;
break;
case 3 :
b._alpha = 100;
c._alpha = 40;
break;
case 4 :
c._alpha = 100;
d._alpha = 40;
break;
case 5 :
d._alpha = 100;
j = 0;
break;
}
}
在“更換節目”按扭上的腳本
on (release) {
if (j == 0) {
txt = "請先選擇屏幕";
} else { //當j不等于0時,執行下列命令:
clip[j-1]._alpha = 100; //恢復被選中的元件的透明度
clip[j-1]._lockroot = true;//使被選中的元件在調入的外部文件的_root指向本身的主時間軸
loadMovie(lp[k], clip[j-1]);//在clip[j-1]元件中調入數組lp中第k個元數表示的網址
k++;
if (k == lp.length) {//數組lp中元素個數
k = 0;
}
}
}
在第 6 幀上 “多屏”按扭上的腳本
on (release) {
gotoAndStop(1);
}
在第 6 幀上“更換節目”按扭上的腳本
on (release) {
k++;
if (k == 7) { //數組lp中有7個元素
k = 0;
}
e._lockroot = true;
loadMovie(lp[k], e);//在e元件中調入數組lp中第k個元數表示的網址
}
作業 把2至4幀的腳本用自定義函數簡化;把在“屏幕選擇”按扭上的腳本用函數或者數組變量簡化。
查看全套"Flash AS 高級教程"