本例將要實現(xiàn)的是星球大戰(zhàn)開場時的那種字幕顯示效果,
Flash制作電影字幕顯示效果
。而實時創(chuàng)建影片剪輯,并使用隨機函數(shù)和影片剪輯的Drawing Method(繪畫方法)繪制星空背景則是本節(jié)的重點。主要的影片結(jié)構(gòu)如下圖所示。圖1 影片結(jié)構(gòu)
從上面這個圖片中可以看到,這個例子的結(jié)構(gòu)還是比較簡單的。整個影片除去一個黑色背景之外只需要兩個圖層——用來放置要顯示的字幕的第1層和用來“鋪星星”作背景的第2層。因此,整個制作過程可以大致劃分為字幕的制作與背景的制作兩大部分。
字幕的制作相對比較簡單,所以就不多說了,這里簡要提一下“星空”背景的制作原理。在這個例子中,用到的星空背景將不是用繪圖工具一點點畫出來的靜態(tài)背景,而是使用ActionScript動態(tài)生成的動態(tài)背景。因為每次運行時,對應(yīng) N顆星星,程序會隨機產(chǎn)生N組橫坐標(biāo)、縱坐標(biāo)值。再加上每顆星星的大小,亮度也是隨機的,所以每次鋪出來的背景絕對是不一樣的。
在制作過程中主要使用了Free Transform工具的部分功能。并利用Math.random()函數(shù)生指定范圍內(nèi)的隨機數(shù)字的公式,實時創(chuàng)建影片剪輯以及部分繪畫方法的使用。最終播放效果如圖2所示,要實現(xiàn)這一效果,具體制作過程如下
圖2 星球大戰(zhàn)開場文字最終效果圖
一.制作字幕效果
1.新建一個電影,在屬性面板中設(shè)置其尺寸為550pxX400px,選擇一種顏色(本例為#000000)作為背景色。
2.雙擊時間線上的“圖層1”,并將其改為“caption”,主要用于旋置文字的圖形元件,在工具箱中選取文本工具,并在屬性面板中設(shè)置文字的顏色、字體和大小,本例設(shè)置文本的顏色為#CCCC00,大小為40,字體為Times New Roman,當(dāng)然也可以設(shè)置為其它屬性。設(shè)定好后,點擊舞臺并寫上字幕文字,如圖3所示。
圖3 在舞臺上輸入的文字
3.接下來該是給文字添加一點透視效果的時候了。選中寫好的字幕文字,按兩下Ctrl+B將文字分離成為色塊。這是因為下一步的變形要求其對象必須是色塊。從工具箱中選取任意變形工具 ,然后從選項面板中的扭曲按鈕 。將分離后的文本能過調(diào)整四個角上的手柄,使整個變形框成一梯形,效果如圖4所示。
圖4 調(diào)整手柄
4.變形完畢后選擇“插入/轉(zhuǎn)換為元件”菜單命令,將變形后的字幕轉(zhuǎn)換為圖形元件,并為其命名為“caption”
選中字幕后選擇按“Ctrl+T”,打開Transfrom(變形)面板。調(diào)整縮放比例的數(shù)值,使第一行字的大小與未進行透視變形前差不多,如圖5所示。
圖5 變形面板
5.將字幕元件拖動到舞臺下方邊緣之外,如圖6所示:
圖6 拖動字幕
6.點擊時間線上的第200幀,按F6插入一個關(guān)鍵幀。選中第200幀上的字幕元件,使用Transform(變形)面板將其縮小后將其拖到舞臺中上方,如圖7所示。
圖7 縮小字幕元件
7.右擊第1幀,在彈出的快捷菜單上選擇“創(chuàng)建補間動畫”,將第1到第200幀轉(zhuǎn)化為運動中間幀動畫。按Enter鍵看動畫的效果的時候你會發(fā)現(xiàn),整個字幕運動過程的前半部分相對后面結(jié)束部分的速度要慢一些。所以,需要對運動的速度進行一些調(diào)整。選中第1幀,在屬性面板中將其中的簡易選項設(shè)為某個正值,如圖8示。如此,字幕運動的后半部分就會放慢速度了。
圖8 屬性面板
二.制作背景
1.新建一圖層,并為其命名為“stars”,然后將這個圖層拖動到字幕層“caption”的下面,打開Actions(動作)面板。選中stars圖層的第一幀后在Actions面板中輸入以下代碼(注釋號“//”后的內(nèi)容可不輸)
iMax = 400;
//星星總數(shù)。
sClipName = "starbg";
//背景影片剪輯名字
iStarSizeMax = 2;
//星星大。ㄗ畲笾担
iStarSizeMin = 1;
//星星大。ㄗ钚≈担
iStarAlphaMax = 100;
//星星透明度(最大值)
iStarAlphaMin = 80;
//星星透明度(最小值)
this.createEmptyMovieClip(sClipName, 0);
//創(chuàng)建一個空白的背景影片剪輯。
for (i=1; i<=iMax; i++) {
iStarX = Stage.width*Math.random();
//星星的X軸坐標(biāo)
iStarY = Stage.height*Math.random();
//星星的Y軸坐標(biāo)
iStarSize = (iStarSizeMax-iStarSizeMin)*Math.random()+iStarSizeMin;
//星星的大小
iStarAlpha = (iStarAlphaMax-iStarAlphaMin)*Math.random()+iStarAlphaMin;
//星星的透明度
iStarColor = 0xffffff;
//星星的顏色
with (this[sClipName]) {
lineStyle(iStarSize, iStarColor, iStarAlpha);
//設(shè)定畫星星畫筆的大小,顏色,透明度
moveTo(iStarX-1, iStarY);
//將畫筆移動到要繪制星星的位置
lineTo(iStarX, iStarY);
//繪制一條從點(iStarX-1,iStarY)到點(iStarX,iStarY)之間的,長度為一個像素的直線
}
}
程序詳解:
第1行到第12行是一些簡單的變量聲明,
電腦資料
《Flash制作電影字幕顯示效果》(http://www.ishadingyu.com)。其中,變量iMax的值就是背景上將出現(xiàn)的星星的個數(shù)。sClipName是用來繪制星空背景的影片剪輯(也就是圖1-93的表識為2的那一層)的名字。第5到第8行的兩個變量對應(yīng)的是星星的最大尺寸和最小尺寸。iStarSizeMax最好不要太大,因為這個值越大效果越差。第9到第12行所確定的是星星透明度的最大值與最小值,而這個透明度反映出來的效果就是星星的亮度。第13行的createEmptyMovieClip方法是Flash MX中的新東西。具體語法是:
myMovieClip.createEmptyMovieClip (instanceName, depth)
其作用是在myMovieClip中創(chuàng)建一個名為instanceName的空白影片剪輯(空白=什么都沒有),它在myMovieClip中的深度為depth。這也就是說,要引用這個新影片剪輯的話,可以使用myMovieClip.instanceName或myMovieClip[instanceName]這兩種語法。在本例中,myMovieClip參數(shù)的位置上寫的是this對象,即當(dāng)前影片剪輯。所以這第13行程序的意思就是,在當(dāng)前影片剪輯中創(chuàng)建一個名字為sClipName(這個變量的值是“starbg”)的空白影片剪輯,其放置的深度為1。
第15行到最后是個for循環(huán),它是繪制星星的主要程序段。第16到33行是循環(huán)的主體,其中,第16到23行使用同一條隨機數(shù)公式來隨機設(shè)定每顆星星的大小、透明度,為下面的繪制過程作準(zhǔn)備。這條用來獲得給定范圍內(nèi)隨機數(shù)的公式是:(最大值 — 最小值)× 隨機數(shù)函數(shù) + 最小值。注意,這條公式中所使用的隨機數(shù)函數(shù)必須是返回0和1之間(包括0)隨機數(shù)的隨機函數(shù),F(xiàn)lash MX中的隨機函數(shù)Math.random()就符合這個要求。
再回頭來看看程序。這第16與18行的程序似乎跟上面的公式不一樣嘛!乍看之下,的確,這兩行程序似乎是不一樣。但是,如果當(dāng)上面那條公式中的最小值等于0時,公式會變形為:最大值 × 隨機數(shù)函數(shù)。這樣就和16、18行很符合了。iStarX和iStarY變量分別代表的是星星在舞臺上橫坐標(biāo)和縱坐標(biāo),所以這里分別用舞臺的寬(Stage.width)和高(Stage.height)乘以隨機函數(shù)來得到舞臺之內(nèi)的某組橫、縱坐標(biāo)值。而iStarSize與iStarAlpha分別表示了星星的大小和透明度,這兩條使用的就是標(biāo)準(zhǔn)的隨機數(shù)公式了。iStarColor用以表示星星的顏色(其實也是可以改用隨機公式來確定的),這里使用0xffffff,即純白色。
第26到33行是真正動筆繪制的時候。首先,第26行用了一個with語句,這條語句始現(xiàn)于Flash 5,具體語法為:
with (object) {
statement(s);
}
使用這條語句可以讓你在兩個花括號間直接設(shè)置對象object的屬性,而不需要在每個屬性前面再加上object的引用。例如,要設(shè)置影片剪輯mc的_x屬性,可以寫成:
mc._x=100;
而使用with語句就可以寫成:
with (mc) {
_x=100;
}
使用with語句可以將某一對象的屬性設(shè)定或方法調(diào)用都集中在一起,從而使程序的實現(xiàn)更加結(jié)構(gòu)化,清晰化。當(dāng)然,象上面例子這種,只設(shè)置單個或少數(shù)屬性的情況下,with語句的好處是比較難體現(xiàn)的。
程序中with語句的object參數(shù)是this[sClipName],即第13行程序創(chuàng)建的新影片剪輯starbg。所以,下面花括號中的操作都是針對starbg進行的。第27到32行用的是Flash MX中新添功能Drawing Method(繪圖方法)中的三條——lineStyle、moveTo和lineTo方法。
lineStyle具體語法如下:
myMovieClip.lineStyle. ([thickness[,rgb[,alpha]]])
myMovieClip是要進行設(shè)置的影片剪輯的名字。參數(shù)thickness,rgb,alpha分別表示線的粗度,16進制形式的顏色值和透明度。如果什么參數(shù)也不給的話,那么屏幕將畫不出任何線。
moveTo具體語法如下:
myMovieClip.moveTo (x,y)
將畫筆移動到坐標(biāo)為(x,y)的點上。這條語句只負(fù)責(zé)移動畫筆并不實際進行任何的繪圖操作。
lineTo具體語法如下:
myMovieClip.lineTo (x,y)
在畫筆當(dāng)前所在位置和參數(shù)所指定的坐標(biāo)(x,y)之間畫一條直線。例如,當(dāng)前畫筆在坐標(biāo)為(0,0)的點上,執(zhí)行一條lineTo(10,10)之后,就會在(0,0)到(10,10)之間出現(xiàn)一條直線。注意,在調(diào)用這個方法之前一定要先調(diào)用lineStyle方法設(shè)置好線的屬性,否則你將畫不出任何東西。
2.到了這里,整個例子可以說是基本上完成了。但為了能讓字幕有一點點消失在黑色的星空之中的效果,再給它添加個“簾子”。新建一圖層,并為其命名為“shade”,按Shift+F9鍵,打開“混色器”面板。將填充樣式改為“線型漸變”后指定兩個黑色指針,并將其中一個的Alpha值設(shè)定為0%,即完全透明,如圖9所示。
圖9 設(shè)置“混色器”面板
3.從工具箱中選取“矩形”工具。在屬性面板中設(shè)定邊框色為無色,填充色為上面設(shè)定的線性漸變。點擊第200幀,在shade上畫一個漸變矩形色塊,大小應(yīng)比下面caption層上字幕的尺寸略大,從工具箱中選取“填充變形”工具 。然后點擊漸變色塊,調(diào)整手柄將漸變的方向改為透明部分朝下,調(diào)整漸變方向,效果如圖如圖10所示。
圖10 調(diào)整漸變方向
4.保存影片,按“Ctrl+Enter”預(yù)覽就可以看到漂亮的“星球大戰(zhàn)”開場文字。