Flash CS4教程:利用遮罩功能及添加代碼來(lái)制作切換放大菜單效果

本例主要使用三角函數(shù)知識(shí)來(lái)制作環(huán)繞的菜單效果,并通過(guò)偵聽(tīng)按鈕事件狀態(tài)來(lái)控制菜單中的按鈕,使其在被單擊后進(jìn)行切換并放大顯示在舞臺(tái)的中心位置。
本例思路
.利用遮罩功能制作高光按鈕。
.添加代碼來(lái)控制菜單的切換效果。
Part 1 制作高光按鈕
(1)新建一個(gè)600×300像素,幀頻為12fps的空白文檔。使用“矩形工具”繪制一個(gè)與舞臺(tái)大小相同的矩形,然后設(shè)置填充類(lèi)型為“放射狀”,第1個(gè)色標(biāo)顏色為(R:0,G:114,B:188),第2個(gè)色標(biāo)顏色為(R:0,G:0,B:0),填充效果如圖9-1所示。
圖9-1 制作背景
(2)按Ctrl+F8組合鍵新建一個(gè)影片剪輯(名稱(chēng)為button),然后使用“橢圓工具”繪制一個(gè)圓形,并設(shè)置填充類(lèi)型為“放射狀”,第1個(gè)色標(biāo)顏色為(R:153,G:204,B:51),第2個(gè)色標(biāo)顏色為(R:0,G:102,B:51),填充效果如圖9-2所示。
圖9-2 繪制球形
(3)新建一個(gè)圖層,然后使用“矩形工具”繪制一個(gè)矩形色塊,并設(shè)置填充色為(R:153,G:204,B:51),再使用“任意變形工具”將其處理成如圖9-3所示的效果。
圖9-3 繪制矩形條塊
(4)新建一個(gè)Mask圖層,然后將按鈕復(fù)制到該圖層中,接著將該圖層設(shè)置為下面兩個(gè)圖層的遮罩圖層,如圖9-4所示。
圖9-4 創(chuàng)建遮罩層
(5)新建一個(gè)“按鈕背景”圖層,然后將按鈕復(fù)制到該圖層中,并將第1個(gè)色標(biāo)的Alpha調(diào)整為10%,再將第2個(gè)色標(biāo)向左移動(dòng)一些像素,如圖9-5所示。
圖9-5 繪制按鈕明暗部分
(6)新建一個(gè)“高光”圖層,然后使用“橢圓工具”繪制一個(gè)橢圓,并設(shè)置填充類(lèi)型為“線(xiàn)性”,第1個(gè)色標(biāo)顏色為(R:255,G:255,B:255),Alpha為70%,第2個(gè)色標(biāo)顏色為(R:255,G:255,B:255),Alpha為50%,第3個(gè)色標(biāo)顏色為(R:255,G:255,B:255),Alpha為0%,如圖9-6所示。
圖9-6 繪制按鈕高光
Part 2 添加控制程序
(1)在“庫(kù)”面板中為button影片剪輯添加元件類(lèi),并將基類(lèi)修改為Sprite類(lèi),如圖9-7所示。
圖9-7 添加元件類(lèi)
(2)返回到“場(chǎng)景1”,新建一個(gè)AS圖層,然后在第1幀輸入代碼。本例用到緩沖原理,所以要先導(dǎo)入Tweener類(lèi);第3~6行代碼是經(jīng)常使用到的一種編程方式,首先創(chuàng)建一個(gè)容器來(lái)存儲(chǔ)所有的對(duì)象,便于統(tǒng)一控制,然后使用for()循環(huán)語(yǔ)句創(chuàng)建12個(gè)按鈕元件類(lèi)對(duì)象(如第15~20行代碼)。
AS3代碼
import caurina.transitions.Tweener;//導(dǎo)入Tweener類(lèi) //創(chuàng)建一個(gè)容器,用于存儲(chǔ)本例中的所有創(chuàng)建的對(duì)象 var container_mc:Sprite = new Sprite(); container_mc.x = stage.stageWidth/2; //定位在舞臺(tái)中心 container_mc.y = stage.stageHeight/2; addChild(container_mc); var angle:uint=0; //角度 var R:Number = 100; //圓的半徑 var _length:uint = 12; //按鈕個(gè)數(shù) var newX = 0; //被單擊的按鈕X坐標(biāo) var newY = 0; //被單擊的按鈕Y坐標(biāo) for (var i=0; i<=_length; i++) { var _mc:Sprite = new button(); _mc.buttonMode = true; _mc.name = "mc" + i; _mc.addEventListener(MouseEvent.CLICK,clickHandler); container_mc.addChild(_mc); if (i == _length) { _mc.x = newX; _mc.y = newY; //指定此對(duì)象禁止接收鼠標(biāo)消息 _mc.mouseEnabled = false; Tweener.addTween(_mc, {scaleX:2, scaleY:2, time:1, transition:"easeInOutQuint"}); } else { angle += 30; var radians:Number = angle * Math.PI / 180; var X:Number = Math.cos(radians) * R; var Y:Number = Math.sin(radians) * R; _mc.x = X; _mc.y = Y; } |
(3)第22~29行代碼是利用三角函數(shù)來(lái)進(jìn)行精確定位,首先通過(guò)for()循環(huán)創(chuàng)建_length個(gè)按鈕對(duì)象,然后進(jìn)行角度上的遞增30(angle += 30),在已知半徑和角度后,便可以通過(guò)三角函數(shù)來(lái)求得各不同角度的按鈕坐標(biāo)位置,其主要原理如圖9-8所示。
圖9-8 三角函數(shù)原理
(4)創(chuàng)建后的按鈕排序原理圖和發(fā)布影片后的效果如圖9-9和圖9-10所示,其中原理圖中的坐標(biāo)原點(diǎn)為container_mc容器的原點(diǎn)位置。
圖9-9 按鈕排序原理圖
圖9-10 發(fā)布效果
(5)下面進(jìn)一步判斷和定位按鈕的位置,第23~29行代碼,判斷i的值是否等于按鈕的總個(gè)數(shù),如果等于就將按鈕的坐標(biāo)設(shè)置為(newX,newY),即(0,0),也就是將按鈕位置設(shè)置在container_mc容器的原點(diǎn)位置,并使用Tweener類(lèi)的addTween()方法將其寬/高縮放比例(scaleX, scaleY)都設(shè)置為2,影片的發(fā)布效果如圖9-11所示。
AS3代碼
import caurina.transitions.Tweener;//導(dǎo)入Tweener類(lèi) //創(chuàng)建一個(gè)容器,用于存儲(chǔ)本例中的所有創(chuàng)建的對(duì)象 var container_mc:Sprite = new Sprite(); container_mc.x = stage.stageWidth/2; //定位在舞臺(tái)中心 container_mc.y = stage.stageHeight/2; addChild(container_mc); var angle:uint=0; //角度 var R:Number = 100; //圓的半徑 var _length:uint = 12; //按鈕個(gè)數(shù) var newX = 0; //被單擊的按鈕X坐標(biāo) var newY = 0; //被單擊的按鈕Y坐標(biāo) for (var i=0; i<=_length; i++) { var _mc:Sprite = new button(); _mc.buttonMode = true; _mc.name = "mc" + i; _mc.addEventListener(MouseEvent.CLICK,clickHandler); container_mc.addChild(_mc); if (i == _length) { _mc.x = newX; _mc.y = newY; //指定此對(duì)象禁止接收鼠標(biāo)消息 _mc.mouseEnabled = false; Tweener.addTween(_mc, {scaleX:2, scaleY:2, time:1, transition:"easeInOutQuint"}); } else { angle += 30; var radians:Number = angle * Math.PI / 180; var X:Number = Math.cos(radians) * R; var Y:Number = Math.sin(radians) * R; _mc.x = X; _mc.y = Y; } |
圖9-11 發(fā)布效果
(6)下面創(chuàng)建動(dòng)態(tài)文本對(duì)象,為按鈕添加文字。第39~47代碼創(chuàng)建一個(gè)不能被選擇且禁止接收鼠標(biāo)消息的動(dòng)態(tài)文本,并設(shè)置樣式和文本位置。其中第42行代碼禁止接收鼠標(biāo)事件(如指針經(jīng)過(guò)或單擊等事件);第43行代碼是設(shè)置字體樣式并調(diào)用 defaultTextFormat()方法,該方法返回一個(gè)文本格式對(duì)象(TextFormat),然后賦給defaultTextFormat屬性(指定應(yīng)用于新插入文本的格式)。
AS3代碼
var X:Number = Math.cos(radians) * R; var Y:Number = Math.sin(radians) * R; _mc.x = X; _mc.y = Y; } var _text:TextField = new TextField(); _text.width = _text.height = 40;//因?yàn)槟J(rèn)情況下寬高都為100 _text.selectable = false; //文字不被選擇 _text.mouseEnabled = false; //指定此對(duì)象禁止接收鼠標(biāo)消息 _text.defaultTextFormat = defaultTextFormat(); //設(shè)置字體樣式 _text.text = i; _text.x = -_text.textWidth/2 - 2; //設(shè)置字體位置 _text.y = -_text.textHeight/2; _mc.addChild(_text); //字體添加到對(duì)應(yīng)按鈕中 } function defaultTextFormat():TextFormat { var format:TextFormat = new TextFormat(); format.font = "黑體"; format.color = 0xFFFFFF; format.size = 20; format.bold = true; return format } function clickHandler(e:MouseEvent) { var _mc:Sprite = e.target as Sprite; newX = _mc.x; newY = _mc.y; Tweener.addTween(_mc, {x:0, y:0,scaleX:2, scaleY:2, time:1, transition:"easeInOutQuint"}); Tweener.addTween(container_mc.getChildAt(_length), {x:newX, y:newY,scaleX:1, scaleY:1, time:1, transition:"easeInOutQuint"}); _mc.mouseEnabled = false; var mc:Sprite = container_mc.getChildAt(_length) as Sprite mc.mouseEnabled = true; container_mc.swapChildren(container_mc.getChildAt(_length),_mc); } |
技巧與提示:
因?yàn)楸纠帉?xiě)的代碼有70多行,為了更好地幫助用戶(hù)理解,因此分塊進(jìn)行展示,用戶(hù)可以打開(kāi)源文件來(lái)查看所有的代碼,關(guān)于更多文本格式(TextFormat)的詳細(xì)信息可參考幫助文檔。
步驟(5)中的第20行代碼是為按鈕注冊(cè)事件偵聽(tīng),偵聽(tīng)器函數(shù)為步驟(6)中的第59行代碼clickHandler()函數(shù),該函數(shù)的作用是當(dāng)按鈕被鼠標(biāo)單擊后,與中間按鈕進(jìn)行位置的切換,其原理如圖9-12所示。
圖9-12 clickHandler()函數(shù)原理圖
(7)在clickHandler()函數(shù)中,首先取得被單擊按鈕的坐標(biāo)位置(如步驟(6)中的第61和62行代碼),當(dāng)按鈕被單擊時(shí),被單擊按鈕緩沖運(yùn)動(dòng)到container_mc容器的中間(也就是原點(diǎn)(0,0))時(shí)會(huì)縮放2倍(如步驟(6)中的第64行代碼中的Tweener類(lèi)方法),同時(shí)位于舞臺(tái)中間的按鈕會(huì)運(yùn)動(dòng)到被單擊按鈕的坐標(biāo)位置(newX,newY),這樣就會(huì)產(chǎn)生切換效果(如步驟(6)中的第65行代碼),如圖9-13所示,這里還通過(guò)container_mc.getChildAt(_length)方法來(lái)取得中間按鈕,并通過(guò)69行代碼中的swapChildren()方法來(lái)進(jìn)行交換z軸順序(也稱(chēng)深度)。
圖9-13 按鈕的切換效果
技術(shù)看板:深度設(shè)置
重新設(shè)置容器列表中對(duì)象所在的深度,可以使用顯示對(duì)象容器.setChildIndex的方法來(lái)設(shè)置,下面列出幾種最為常用的方法,用戶(hù)可直接套用。
AS3代碼
//(1):用于將“要顯示的對(duì)象”進(jìn)行置頂 顯示對(duì)象容器.setChildIndex(要顯示的對(duì)象,要顯示對(duì)象容器.numChildren-1) //(2):用于將“要顯示的對(duì)象”進(jìn)行置底 顯示對(duì)象容器.setChildIndex(要顯示的對(duì)象,0) //(3):用于將“要顯示的對(duì)象A”插入“顯示對(duì)象B”之前 var target:DisplayObject = 顯示對(duì)象容器.getChildByName("顯示對(duì)象B") 顯示對(duì)象容器.setChildIndex(顯示對(duì)象A,顯示對(duì)象容器.getChildIndex(target)) //(3):用于將“要顯示的對(duì)象A”插入“顯示對(duì)象B”之后 var target:DisplayObject = 顯示對(duì)象容器.getChildByName("顯示對(duì)象B") 顯示對(duì)象容器.setChildIndex(顯示對(duì)象A,顯示對(duì)象容器.getChildIndex(target)-1) |
(8)到該步驟已經(jīng)完成該實(shí)例的制作,用戶(hù)可采用相同的方法進(jìn)行思路擴(kuò)展,制作出其他相似的效果,如圖9-14所示。
圖9-14 思路擴(kuò)展
(9)按Ctrl+Enter組合鍵發(fā)布本例。
教程結(jié)束,以上就是利用Flash CS4遮罩功能及添加代碼來(lái)制作切換放大菜單效果,制作過(guò)程有點(diǎn)復(fù)雜,但很實(shí)用,希望對(duì)大家有所幫助!
相關(guān)文章
flash如何制作形狀補(bǔ)間動(dòng)畫(huà)?flash創(chuàng)建補(bǔ)間形狀技巧
flash一款功能強(qiáng)大的動(dòng)畫(huà)制作軟件,制作動(dòng)畫(huà)很非常的方便,但動(dòng)畫(huà)過(guò)程使用的都是形狀補(bǔ)間功能。今天小編就來(lái)給大家介紹一下flash形狀補(bǔ)間動(dòng)畫(huà)制作方法,感興趣的快來(lái)看看吧2022-05-11flash cs6怎么做花朵成長(zhǎng)的逐幀動(dòng)畫(huà)?
flash cs6怎么做花朵成長(zhǎng)的逐幀動(dòng)畫(huà)?flash中想要繪制一個(gè)花開(kāi)的動(dòng)畫(huà),該怎么畫(huà)出各個(gè)圖形然后做逐幀動(dòng)畫(huà)呢?下面我們就來(lái)看看詳細(xì)的教程,需要的朋友可以參考下2021-03-09Flash怎么將動(dòng)畫(huà)復(fù)制為ActionScript3.0并使用?
Flash怎么將動(dòng)畫(huà)復(fù)制為ActionScript3.0并使用?Flash中制作的動(dòng)畫(huà)想要直接粘貼到另一個(gè)對(duì)象中,我們可以使用復(fù)制腳本代碼的方式復(fù)制動(dòng)畫(huà),下面我們就來(lái)看看詳細(xì)的教程,需2017-12-08flash怎么制作漫畫(huà)人物行走的動(dòng)畫(huà)?
flash怎么制作漫畫(huà)人物行走的動(dòng)畫(huà)?flash中想要制作一段行走的動(dòng)畫(huà),該怎么設(shè)計(jì)呢?下面我們就來(lái)看看詳細(xì)的教程,很簡(jiǎn)單,需要的朋友可以參考下2017-04-18flash逐幀動(dòng)畫(huà)制作全過(guò)程解析
這篇教程是向腳本之家的朋友分享flash逐幀動(dòng)畫(huà)制作全過(guò)程,教程非常基礎(chǔ),很適合新手來(lái)學(xué)習(xí),推薦過(guò)來(lái),有興趣的朋友可以過(guò)來(lái)學(xué)習(xí)2016-01-15- 下面小編就為大家介紹利用Flash正確的口型吻合動(dòng)畫(huà)技巧,教程很不錯(cuò),非常適合新手來(lái)學(xué)習(xí),推薦到腳本之家,喜歡的朋友一起來(lái)學(xué)習(xí)吧2015-01-15
Flash動(dòng)畫(huà)制作技巧 圖形元件相關(guān)知識(shí)介紹
這篇教程是向腳本之家的朋友介紹Flash動(dòng)畫(huà)制作技巧:圖形元件相關(guān)知識(shí),教程很基礎(chǔ),但很實(shí)用,推薦到腳本之家,喜歡的朋友可以過(guò)來(lái)學(xué)習(xí)一下,希望能對(duì)大家有所幫助2015-01-05Flash動(dòng)畫(huà)制作小黑人經(jīng)典動(dòng)畫(huà)效果技巧介紹(圖文)
本教程是向大家介紹Flash動(dòng)畫(huà)制作小黑人經(jīng)典動(dòng)畫(huà)效果技巧,教程很經(jīng)典,介紹的非常詳細(xì),相信對(duì)學(xué)習(xí)Flash朋友有一定的幫助。轉(zhuǎn)發(fā)過(guò)來(lái),希望對(duì)大家有所幫助2014-08-05Flash制作旋轉(zhuǎn)的3D立體盒動(dòng)畫(huà)教程
本教程是向大家介紹利用Flash制作旋轉(zhuǎn)的3D立體盒動(dòng)畫(huà)教程,制作出來(lái)的效果非常好看,教程介紹的很詳細(xì),希望大家通過(guò)本篇教程能學(xué)習(xí)Flash制作3D動(dòng)畫(huà)的方法,這樣以后就可以2014-07-22Flash cs3制作人物行走動(dòng)畫(huà)技巧圖文解析
本教程向大家介紹了Flash cs3制作人物行走動(dòng)畫(huà)技巧,并做了詳細(xì)的介紹,覺(jué)得教程很不錯(cuò),轉(zhuǎn)發(fā)過(guò)來(lái),希望給朋友們帶來(lái)幫助2014-07-15