隨筆-31  評論-257  文章-0  trackbacks-0
          在Flex里面不像在Flash里面隨意制作動畫了,F(xiàn)lex更趨向于應(yīng)用程序,而不是動畫制作了,所以沒有了時間軸的概念。在Flex中使用動畫效果,可以用Flex自帶的Effect,或者自已定制Effect,因為很多人都想借Flash里面的一樣操作Flex,比如在Flash里面做一個動態(tài)按鈕很容易,當鼠標移動到上面時,會有很多發(fā)光的點跑出來(熒火蟲效果),這種效果在Flash十分容易實現(xiàn),但在Flex里面要實現(xiàn)這種效果就不是那么簡單的了,下面說說在Flex里的的動務(wù)效果的使用與自定義制作。

          首先介紹一下Flex里面的自帶的效果有以下幾種:
            Blur                            模糊效果
            Move                          移動效果
            Fade                          淡入淡出效果            
            Glow                          發(fā)光效果
            Resize                       調(diào)整大小效果
            Rotate                       旋轉(zhuǎn)效果
            Zoom                         縮放效果
            WipeLeft                    用遮罩實現(xiàn)畫面收放效果,下同,分別為不同方向
            WipeRight
            WipeUp
            WipeDown

          不同的效果所需要設(shè)置的屬性也不一樣,比如Blur效果需要設(shè)置它的X與Y軸的模糊像素
          <mx:Blur id="blur" blurXFrom="0" blurXTo="10" />
          而Move效果需要設(shè)置移動的位置信息
          <mx:Move id="moveEffect" xFrom="-100" />
          其它設(shè)置可以參考Flex語言參考

          下面說說如何使用這些效果。要運行這些效果有兩種方法:一種是調(diào)用該效果的play()方法,另外一種是使用觸發(fā)器來觸發(fā)效果。
          (1)使用play()方法:
          先看效果:

          以下代碼:
           1 <?xml version="1.0" encoding="utf-8"?>
           2 <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
           3     <mx:Script>
           4         <![CDATA[
           5             private function onClick(event:Event):void {
           6                 be.target = event.currentTarget;
           7                 be.play( );
           8             }
           9         ]]>
          10     </mx:Script>
          11    
          12     <mx:Blur id="be" blurXTo="50" blurYTo="50" duration="1000" />
          13 
          14     <mx:Panel id="p" width="200" height="180" click="onClick(event)" />
          15 </mx:Application>


          在代碼中看到,要使用效果,先定好一個效果,如上面的<mx:Blur ...>該標簽就是模糊效果的MXML標簽,定好效果后在Panel的點擊事件里再對該效果進行一些設(shè)置,如be.target = event.currentTarget 設(shè)置該效果將要應(yīng)用到的目標組件(Component),之后再調(diào)用play()方法后,該效果就會應(yīng)用在Panel上面播放!

          (2)使用觸發(fā)器播放效果:
          使用觸發(fā)器播放效果的話,可以不用寫ActionScript代碼,直接在組件的效果觸發(fā)器上指明使用哪個效果就可以了,比較簡單明了,但就不能進行更多的屬性定制,而用AS控制播放的話,可以對效果進行很多的設(shè)置再相應(yīng)根據(jù)情況播放,先看看觸發(fā)器播放的代碼:
          1 <?xml version="1.0" encoding="utf-8"?>
          2 <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
          3    
          4     <mx:Blur id="be" blurXTo="50" blurYTo="50" duration="2000" />
          5 
          6     <mx:Panel id="p" width="200" height="180" creationCompleteEffect="{be}" />
          7 </mx:Application>


          看以上代碼,先寫好了Blur的效果并設(shè)置好屬性后,duration="2000"這個是播放的時間以毫秒為單位。
          在Panel標簽里有這樣一句:creationCompleteEffect="{be}" 這個就是觸發(fā)器,是該Panel組件的效果觸發(fā)器,當Panel組件加載完成時,會由系統(tǒng)自動調(diào)用該效果觸發(fā)器,觸發(fā)器里面指了觸發(fā) be 這個Blur效果
          在Flex里面還有很多觸發(fā)器如:
            addedEffect                                       被添加進容器時觸發(fā)效果
            removedEffect                                   被從容器中移除時觸發(fā)效果
            creationCompleteEffect                     被創(chuàng)建成功時觸發(fā)效果
            focusInEffect                                     獲得焦點時觸發(fā)
            focusOutEffect                                   失去焦點時觸發(fā)
            hideEffect                                          被隱藏時(visible=false)觸發(fā)
            showEffect                                        被顯示時(visible=true)觸發(fā)
            rollOverEffect                                     鼠標經(jīng)過時觸發(fā)
            rollOutEffect                                       鼠標離開時觸發(fā)
            mouseDownEffect                              鼠標按下時觸發(fā)
            mouseUpEffect                                   鼠標松開時觸發(fā)
            moveEffect                                         被移動時觸發(fā)
            resizeEffect                                       被重整大小時觸發(fā)

          注意:這些都是效果觸發(fā)器,不要與事件觸發(fā)器混亂了。事件觸發(fā)器是rollOver,事件觸發(fā)器與效果觸發(fā)器差不多,事件觸發(fā)器是當用戶執(zhí)行相就操作時觸發(fā)事件,將會調(diào)用自定的事件觸發(fā)處理函數(shù),而效果觸發(fā)器是執(zhí)行相應(yīng)操作時被觸發(fā)并由系統(tǒng)自動調(diào)用所定的效果的play()方法。

          現(xiàn)在說說效果的一些其它屬性:
          每個效果都有reverse( );方法,該方法是反向播放,原本由小到大的變化,而調(diào)用reverse( );后再運行play()的話,效果將會從大到小進行播放。
          但要注意的一點是,reverse( );不會自動播放,即是單單調(diào)用reverse( );的話,效果并不會播放,他只會記錄該效果為倒轉(zhuǎn),而要再調(diào)用play()后倒轉(zhuǎn)效果才會開始播放。而調(diào)用pause( )與resume( )就是暫停與繼續(xù)播放效果

          startDelay這個屬性是設(shè)置效果的播放延時,以毫秒為單位,即要等待多少毫秒后效果才開始播放,如:
          <mx:Blur id="be" blurXTo="50" startDelay="3000" />
          該模糊效果將會在調(diào)用play()之后3秒才開始播放

          repeatCount這個屬性是設(shè)置效果的重復(fù)次數(shù),默認為1,設(shè)置為0的話就是不停循環(huán)播放
          <mx:Blur id="be" blurXTo="50" startDelay="3000" repeatCount="5" />

          每個效果都有兩個事件:effectStart 與 effectEnd
          你可以在該效果事件的處理函數(shù)里面對效果作相應(yīng)的操作,如:
           1 <?xml version="1.0" encoding="utf-8"?>
           2 <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
           3     <mx:Script>
           4         <![CDATA[
           5             import mx.events.EffectEvent;
           6             public function onEffEnd(e:EffectEvent):void{
           7                 e.effectInstance.reverse();
           8                 e.effectInstance.play();
           9             }
          10         ]]>
          11     </mx:Script>
          12     <mx:Blur id="be" blurXTo="50" blurYTo="50" duration="2000" />
          13 
          14     <mx:Panel id="p" width="200" height="180" creationCompleteEffect="{be}" effectEnd="onEffEnd(event)" />
          15 </mx:Application>

          當效果播放完時,系統(tǒng)將會自動觸發(fā)effectEnd事件,在處理函數(shù)里面,將該效果Instance即現(xiàn)時播放的效果實例進行倒轉(zhuǎn)并播放,當播放完,又會觸發(fā)effectEnd事伯,這樣一直循環(huán)!

          現(xiàn)在再來說說效果的組合:
          通常如果你覺得只應(yīng)用一個效果很單調(diào)的話,可以進行效果組合應(yīng)用,即多個效果同時播放或者順序播放,
          如,當加載頁面時,你想Panel先模糊到一定程度,再將Panel移動到某個位置,再把Panel還原成原來的清淅度(即消退模糊)。這樣分析一下,一共用了三個效果,一,先應(yīng)用Blur(由清至模)效果,當Blur完成時,再應(yīng)用Move效果,當Move完成時,再應(yīng)用另外一個Blur(由模至清)效果。這樣三個效果組合就是按順序組合,先后運行。先來看看效果:

          再來看看代碼:
           1 <?xml version="1.0" encoding="utf-8"?>
           2 <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
           3    
           4     <mx:Sequence id="sequenceEffect">
           5         <mx:Blur id="beOut" blurXTo="50" blurYTo="50" duration="500" />
           6         <mx:Move id="mv" xTo="200" yTo="150" duration="500" />
           7         <mx:Blur id="beIn" blurXFrom="50" blurYFrom="50" blurXTo="0" blurYTo="0" duration="500" />
           8     </mx:Sequence>
           9    
          10     <mx:Panel id="p" width="200" height="180" mouseDownEffect="sequenceEffect"  />
          11 </mx:Application>

          看以上代碼,<mx:Sequence id="sequenceEffect">標簽就是順序組合效果標簽,當應(yīng)用sequenceEffect效果的時候,它會按順序播放該標簽里面的三個子效果。

          另外的就是同時播放了,
          1 <mx:Parallel id="parallelEffect">
          2           <mx:Blur id="beOut" blurXTo="50" blurYTo="50" duration="500" />
          3       <mx:Move id="mv" xTo="200" yTo="150" duration="500" />
          4 </mx:Parallel>

          這個標簽就是同時播放的效果標簽,放在它里面的子效果都會同時播放,即一邊模糊一邊移動。這個都可以自由組合,<mx:Parallel>與<mx:Sequence>標簽都可以自由組合,例如先按順序先播放模糊,再同時播放移動與隱藏等。這里就不多說了。

          使用Flex自帶的效果基本用法就這些,下篇文章將討論自定義效果的制作,下篇將會詳細說說這篇文章上面說到的 effectInstance 即實例與工廠的概念。



          posted on 2008-07-29 14:20 姜大叔 閱讀(20792) 評論(6)  編輯  收藏 所屬分類: Flash/Flex

          評論:
          # re: Flex的動畫效果與變換!(一) 2008-08-20 14:51 | HUIHUI
          厲害  回復(fù)  更多評論
            
          # re: Flex的動畫效果與變換!(一) 2010-06-14 22:27 | Flex初學(xué)
          好文!!!!  回復(fù)  更多評論
            
          # re: Flex的動畫效果與變換!(一) 2011-06-14 12:15 | easy518網(wǎng)址導(dǎo)航
          # re: Flex的動畫效果與變換!(一) 2011-07-01 08:53 | fcer
          學(xué)習(xí)了。。謝謝  回復(fù)  更多評論
            
          # re: Flex的動畫效果與變換!(一) 2011-08-15 14:21 | fx
          很好 對動畫效果有了初步的認識,寫的不錯。。  回復(fù)  更多評論
            
          # re: Flex的動畫效果與變換!(一) 2012-02-13 13:58 | sunli
          好東西啊 哈哈  回復(fù)  更多評論
            
          主站蜘蛛池模板: 龙里县| 和静县| 辉南县| 克东县| 乌审旗| 日土县| 西昌市| 尉氏县| 闽侯县| 顺平县| 双城市| 平凉市| 舞钢市| 板桥市| 长治市| 建水县| 廉江市| 山阴县| 乌拉特中旗| 阜康市| 东源县| 宾川县| 伊宁市| 彭阳县| 修水县| 酒泉市| 清徐县| 曲阳县| 且末县| 高台县| 拉孜县| 白朗县| 丹巴县| 泽普县| 道真| 革吉县| 柞水县| 邻水| 三门峡市| 伊川县| 定州市|