本例主要是在上一個實例的基礎上進行擴展,計算鼠標跟隨對象來產生具有一定規律的星火特效。
本例思路
導入背景素材,然后制作出星火特效。
創建文檔類,產生鼠標跟隨的多角星形特效;創建元件類的擴展類,產生隨機大小的火花效果。
Part 1 制作星火特效
(1)新建一個大小為500×300像素,幀頻為30fps的空白文檔。按Ctrl+R組合鍵導入本書配套光盤中的“Chapter08/素材/西湖夜景.jpg”文件,然后設置其坐標為(0,0),如圖8-1所示,再采用前面的方法在“屬性”面板中添加Main文檔類。
圖8-1 導入背景
(2)按Ctrl+F8組合鍵新建一個影片剪輯(名稱為Star_mc),進入該影片剪輯的編輯區域,然后按住Shift+Alt組合鍵的同時使用“橢圓工具”在該影片剪輯的中心點繪制一個圓形。
圖8-2 繪制圓形
技巧與提示:
圖形的填充色類型為“放射狀”,第1個色標顏色為(R:255,G:0,B:0),第2個色標顏色為(R:153,G:0,B:0),第3個色標顏色為(R:153,G:0,B:0),Alpha為0%。
(3)新建一個star圖層,再單擊“工具箱”中的“多角星形工具”按鈕 ,并在“屬性”面板中設置好該工具的參數,然后按住Shift+Alt組合鍵的同時在影片剪輯的中心點繪制一個如圖8-3所示的星形。
圖8-3 繪制多角星形
(4)使用“選擇工具”調整好星形的頂點位置,如圖8-4所示。
圖8-4 調整頂點
(5)選擇調整好的多角星形,然后原位復制出一份,按Ctrl+Alt+S組合鍵打開“縮放和旋轉”對話框,設置縮放為40%,再設置其顏色為白色,如圖8-5所示。
圖8-5 拷貝并縮放圖形
(6)返回到“場景1”,按Ctrl+F8組合鍵新建一個影片剪輯(名稱為Magic_mc),再設置填充類型為“放射狀”,第1個色標顏色為(R:255,G:255,B:255), 第2個色標顏色為(R:255,G:255,B:204),第3個色標顏色為(R:255,G:204,B:0),第4個色標顏色為(R:255,G:102,B:0),第5個色標顏色為(R:153,G:0,B:0),Alpha為0%,然后按住Alt鍵的同時使用“矩形工具”以該影片剪輯中心點為起點繪制一個如圖8-6所示的矩形。
圖8-6 繪制矩形
(7)使用“任意變形工具”選擇矩形,然后按Ctrl+T組合鍵打開“變形”面板,設置旋轉為45°,再單擊“重制選區和變形”按鈕 ,復制出3份圖形,如圖8-7所示。
圖8-7 復制圖形
(8)復制出5個圖形,然后將其調整成如圖8-8所示的顏色,再將復制出的圖形轉換為影片剪輯,并將其分別命名為01、02、03、04和05 。
圖8-8 復制圖形
(9)將01、02、03、04和05 影片剪輯分別放置在Magic_mc圖層的5個關鍵幀上,然后分別為其添加不同的“發光”濾鏡,再新建一個AS圖層,最后在“動作-幀”面板中輸入stop():程序,如圖8-9所示。
圖8-9 應用濾鏡效果
Part 2 創建元件類
(1)采用前面的方法分別為Magic_mc和Star_mc影片剪輯添加元件類,如圖8-10所示。
圖8-10 添加元件類
(2)新建一個ActionScript文件,將其命名為Main,然后將其保存在該實例的文件夾中,再輸入控制代碼。
/** * 該類為主程序類 * @author lbynet * @version 0.1 */ package { import flash.display.Sprite; import flash.display.MovieClip; import flash.events.Event; import flash.events.MouseEvent; import flash.ui.Mouse; public class Main extends Sprite { private var star:MovieClip; public function Main() { Mouse.hide(); this.star = new Star_mc(); addChild(star); stage.addEventListener(MouseEvent.MOUSE_MOVE, moveHandler); } private function moveHandler(e:MouseEvent):void { this.star.x = stage.mouseX; this.star.y = stage.mouseY; var _mc = new Magic_mc(); _mc.x = stage.mouseX; _mc.y = stage.mouseY; addChild(_mc); _mc.addEventListener(Event.ENTER_FRAME, RemoveDrop); } private function RemoveDrop(event:Event) { var _mc:MovieClip = event.target as MovieClip; if (_mc.scaleX <= 0) { _mc.removeEventListener(Event.ENTER_FRAME, RemoveDrop); removeChild(_mc); } //trace(this.numChildren) } } } |
技巧與提示:
該文檔類基本包含了“星星灑落”實例中Main文檔類的知識,此外第18行代碼為Mouse類的hide()方法,用于隱藏鼠標指針,在使用該方法前必須先導入Mouse類(如第11行代碼)。
該文檔類定義了一個私有屬性Star,第19行代碼是為該屬性賦值,值為所創建的元件類(Star_mc),并將其添加到顯示列表中(如第20行代碼),而24和25行代碼是為該元件類應用鼠標跟隨效果。
(3)同樣新建一個ActionScript文件,然后輸入控制代碼。
/** * 該類為擴展元件類 * @author lbynet * @version 0.1 */ package { import flash.display.MovieClip; import flash.events.Event; public class Magic_mc extends MovieClip { private var dis:Number; public function Magic_mc() { init(); } private function init() { var Random = 1 + Math.round(Math.random()*4); this.gotoAndStop(Random); this.scaleX = this.scaleY = Math.random(); //產生隨機數-5到5之間的隨機數 dis = Math.round((Math.random()-.5)*10); this.addEventListener(Event.ENTER_FRAME,enterFrameHandler); } private function enterFrameHandler(event:Event) { this.y += 5; this.x += dis; this.scaleX -=.005; this.scaleY -=.005; } } } |
技巧與提示:
第19和20行代碼是為該元件類創建一個1~5之間的隨機數,使該影片剪輯元件類在實例化(被創建時)時將播放頭移到并停止在指定的時間幀上。
Math.random()方法產生0~1之間的隨機數,Math.random()*4方法返回到0~4之間的隨機數,而Math.round()方法用于向上或向下舍入為最接近的整數并返回該值,所以1+Math.round(Math.random()*4)方法取得1~5之間的隨機整數值;gotoAndStop()語句使影片剪輯的播放頭移到并停止在指定的時間幀上。
通過使用Math.random()-0.5 方法來生成-0.5~0.5之間的隨機數,然后乘以10得到-5~5之間的隨機數,再使用Math.round方法進行舍入并取得整數,這樣當鼠標指針由下往上移動時,就會產生星火飄落的效果,如圖8-11所示。
圖8-11 星火飄落效果
第30行代碼是為火花加入y軸坐標方向上的一個固定加速度,而第31行代碼則是火花在x軸坐標方向上的一個-5~5之間的隨機加速度值。
(4)按Ctrl+Enter組合鍵發布程序。
進入論壇參與討論和交作業:http://www.missyuan.com/viewthread.php?tid=424468
歡迎轉載:http://www.kanwencang.com/bangong/20161116/54259.html
文章列表