<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-31  評論-257  文章-0  trackbacks-0
          好久沒有發表文章了,這天寫了一個Flash的一個動畫菜單的效果,在之前看到一個站的一個菜單效果挺不錯,就試著自已也用純AS3寫一個出來試試。看了一下研究了一個算法,自已也寫了個出來,寫得比較粗糙,所以運行時可能還會有點小問題,有空要再優化一下算法才行。


    有點像 Apple 的菜單效果。原本是計劃用圖片的,不過后右為簡單起見,就只用Sprite畫的一個小方格代替了,供大家學習學習,也希望高手指點一下算法!
    以下是代碼:
      1 package {
      2     import flash.display.Sprite;
      3     import flash.geom.Point;
      4     import flash.events.MouseEvent;
      5     import flash.events.Event;
      6     import fl.transitions.Tween;
      7     import fl.transitions.easing.*;
      8 
      9     public class jiangmenu extends Sprite
     10     {
     11         private var photoList:Array;            //存放所有方格的數組
     12         private var defaultLocation:Array;        //存放對應方格數組的默認位置信息
     13         private var targetLocation:Array;        //存放對應方格數組的改變的目標位置信息
     14         private var defaultScale:Array;            //存放對應方格數組的默認縮放比例信息
     15         private var targetScale:Array;            //存放對應方格數組的目標縮放比例信息
     16        
     17         private var maxScale:Number = 1.8;        //最大的縮放比例(即鼠標指向的那個方格)
     18         private var scaleRate:Number = 0.65;    //縮放比例向兩邊衰減的值
     19         private var sideWidth:Number = 30;        //方格的邊長
     20        
     21         private var tween:Tween;
     22        
     23         /**
     24          * 構造函數
     25          */
     26         public function jiangmenu()
     27         {
     28             photoList = createPhotoList();
     29             createDefaultLocation();
     30             createDefaultScale();
     31             addListener();
     32         }
     33        
     34         /**
     35          * 該函數作于對每個按鈕(小方格)增加偵聽器
     36          */
     37         private function addListener():void{
     38             for(var i:int=0;i<photoList.length;i++){
     39                 var p:Point = defaultLocation[i] as Point;
     40                 var sp:Sprite = photoList[i] as Sprite;
     41                 sp.x = p.x;
     42                 sp.y = p.y;
     43                 addChild(sp);
     44                 sp.addEventListener(MouseEvent.MOUSE_OVER,onMouseOver);
     45                 sp.addEventListener(MouseEvent.MOUSE_OUT,onMouseOut);
     46             }
     47            
     48         }
     49        
     50         /**
     51          * 鼠標離開小方格時
     52          */
     53         private function onMouseOut(e:MouseEvent):void{
     54             playDefault();
     55         }
     56        
     57         /**
     58          * 鼠標移動到小方格時
     59          */
     60         private function onMouseOver(e:MouseEvent):void{
     61             var sp:Sprite = e.target as Sprite;
     62             var index:int = photoList.indexOf(sp);
     63             var dp:Point = defaultLocation[index] as Point;
     64             Point(targetLocation[index]).x = dp.x;
     65             Point(targetLocation[index]).y = dp.y;
     66             targetScale[index] = 1*maxScale;
     67            
     68             playSingle(index);
     69            
     70             setFrontPhoto(index);
     71             setBackPhoto(index);
     72            
     73         }
     74        
     75         /**
     76          * 為單個方格進行播放動畫效果
     77          */
     78         private var tmpSP:Sprite;
     79         private function playSingle(index:Number):void{
     80             tmpSP = photoList[index] as Sprite;
     81            
     82             new Tween(tmpSP,"scaleX",Elastic.easeOut,tmpSP.scaleX,targetScale[index],1,true);
     83             new Tween(tmpSP,"scaleY",Elastic.easeOut,tmpSP.scaleY,targetScale[index],1,true);
     84             new Tween(tmpSP,"y",Elastic.easeOut,tmpSP.y,Point(targetLocation[index]).y,1,true);
     85         }
     86        
     87         /**
     88          * 當鼠標離開小方格時,將播放還原到默認大小時的動畫
     89          */
     90         private function playDefault():void{
     91             for(var i:int=0;i<photoList.length;i++){
     92                 tmpSP = photoList[i] as Sprite;
     93                 new Tween(tmpSP,"scaleX",Elastic.easeOut,tmpSP.scaleX,defaultScale[i],1,true);
     94                 new Tween(tmpSP,"scaleY",Elastic.easeOut,tmpSP.scaleY,defaultScale[i],1,true);
     95                 new Tween(tmpSP,"y",Elastic.easeOut,tmpSP.y,Point(defaultLocation[i]).y,1,true);
     96             }
     97         }
     98        
     99         /**
    100          * 以鼠標移動到當前方格的索引為參數,設置該方格前面的方格的位置與縮放信息并播放
    101          * 設置完成后再設置前面的(使用遞歸)
    102          */
    103         private function setFrontPhoto(index:int):void{
    104             if(index == 0){
    105                 return;
    106             }
    107             var bp:Point = targetLocation[index] as Point;
    108             var bs:Number = targetScale[index];
    109            
    110             var ms:Number = bs * scaleRate;
    111             var mp:Point = new Point(bp.x,bp.y - sideWidth*bs*.5 - sideWidth*ms*.5);
    112            
    113             targetLocation[index - 1= mp;
    114             targetScale[index - 1= ms;
    115            
    116             playSingle(index - 1);
    117            
    118             setFrontPhoto(index - 1);
    119         }
    120        
    121         /**
    122          * 以鼠標移動到當前方格的索引為參數,設置該方格后面的方格的位置與縮放信息并播放
    123          * 設置完成后再設置后面的(使用遞歸)
    124          */
    125         private function setBackPhoto(index:int):void{
    126             if(index == (targetLocation.length - 1)){
    127                 return;
    128             }
    129             var bp:Point = targetLocation[index] as Point;
    130             var bs:Number = targetScale[index];
    131            
    132             var ms:Number = bs * scaleRate;
    133             var mp:Point = new Point(bp.x,bp.y + sideWidth*bs*.5 + sideWidth*ms*.5);
    134            
    135             targetLocation[index + 1= mp;
    136             targetScale[index + 1= ms;
    137            
    138             playSingle(index + 1);
    139            
    140             setBackPhoto(index + 1);
    141         }
    142        
    143         /**
    144          * 創建默認的原始大小時的縮放比例
    145          */
    146         private function createDefaultScale():void{
    147             defaultScale = new Array();
    148             targetScale = new Array();
    149             for(var i:int=0;i<10;i++){
    150                 defaultScale[i] = 1;
    151                 targetScale[i] = 1;
    152             }
    153         }
    154        
    155         /**
    156          * 創建默認的原始大小時位置(X,Y)信息
    157          */
    158         private function createDefaultLocation():void{
    159             defaultLocation = new Array();
    160             targetLocation = new Array();
    161             for(var i:int=0;i<10;i++){
    162                 var point:Point = new Point();
    163                 point.x = 100;
    164                 point.y = 30 * i + 50;
    165                 defaultLocation.push(point);
    166                 targetLocation.push(point);
    167             }
    168         }
    169        
    170         /**
    171          * 創建10個小方格,這里直接產生了,不用循環了
    172          */
    173         private function createPhotoList():Array{
    174             var arr:Array = new Array();
    175            
    176             var sp1:Sprite = new Sprite();
    177             var sp2:Sprite = new Sprite();
    178             var sp3:Sprite = new Sprite();
    179             var sp4:Sprite = new Sprite();
    180             var sp5:Sprite = new Sprite();
    181             var sp6:Sprite = new Sprite();
    182             var sp7:Sprite = new Sprite();
    183             var sp8:Sprite = new Sprite();
    184             var sp9:Sprite = new Sprite();
    185             var sp10:Sprite = new Sprite();
    186            
    187             sp1.graphics.beginFill(0xff0000);
    188             sp1.graphics.drawRect(-15,-15,sideWidth,sideWidth);
    189             sp1.graphics.endFill();
    190            
    191             sp2.graphics.beginFill(0x00ff00);
    192             sp2.graphics.drawRect(-15,-15,sideWidth,sideWidth);
    193             sp2.graphics.endFill();
    194            
    195             sp3.graphics.beginFill(0x0000ff);
    196             sp3.graphics.drawRect(-15,-15,sideWidth,sideWidth);
    197             sp3.graphics.endFill();
    198            
    199             sp4.graphics.beginFill(0x00ffff);
    200             sp4.graphics.drawRect(-15,-15,sideWidth,sideWidth);
    201             sp4.graphics.endFill();
    202            
    203             sp5.graphics.beginFill(0xffff00);
    204             sp5.graphics.drawRect(-15,-15,sideWidth,sideWidth);
    205             sp5.graphics.endFill();
    206            
    207             sp6.graphics.beginFill(0x0f0f0f);
    208             sp6.graphics.drawRect(-15,-15,sideWidth,sideWidth);
    209             sp6.graphics.endFill();
    210            
    211             sp7.graphics.beginFill(0xf0f0f0);
    212             sp7.graphics.drawRect(-15,-15,sideWidth,sideWidth);
    213             sp7.graphics.endFill();
    214            
    215             sp8.graphics.beginFill(0xff00ff);
    216             sp8.graphics.drawRect(-15,-15,sideWidth,sideWidth);
    217             sp8.graphics.endFill();
    218            
    219             sp9.graphics.beginFill(0x000000);
    220             sp9.graphics.drawRect(-15,-15,sideWidth,sideWidth);
    221             sp9.graphics.endFill();
    222            
    223             sp10.graphics.beginFill(0xffffff);
    224             sp10.graphics.drawRect(-15,-15,sideWidth,sideWidth);
    225             sp10.graphics.endFill();
    226            
    227             arr = [sp1,sp2,sp3,sp4,sp5,sp6,sp7,sp8,sp9,sp10];
    228            
    229             return arr;
    230         }
    231     }
    232 }
    233 



    posted on 2008-07-29 14:33 姜大叔 閱讀(1388) 評論(0)  編輯  收藏 所屬分類: Flash/Flex
    主站蜘蛛池模板: 国产亚洲精午夜久久久久久| 黄瓜视频高清在线看免费下载| 亚洲av麻豆aⅴ无码电影| 亚洲欧美不卡高清在线| 四虎影院免费视频| 国产精品亚洲精品爽爽| www国产亚洲精品久久久日本| 牛牛在线精品观看免费正| 亚洲av高清在线观看一区二区| 一级特级aaaa毛片免费观看| 精品国产亚洲男女在线线电影 | 一级中文字幕免费乱码专区| 亚洲狠狠爱综合影院婷婷| 国产国产人免费人成成免视频| 国产成人亚洲精品影院| 野花香高清在线观看视频播放免费| 亚洲人成电影亚洲人成9999网| 9277手机在线视频观看免费| 亚洲自国产拍揄拍| 国产传媒在线观看视频免费观看| 日亚毛片免费乱码不卡一区| 亚洲精品高清国产一线久久| 中文字幕免费观看| 亚洲国产无线乱码在线观看| 中文字幕精品亚洲无线码一区| 无码成A毛片免费| 亚洲人成网亚洲欧洲无码| 亚洲精品无码av天堂| 久久精品免费电影| 亚洲人成网站免费播放| 久久精品亚洲乱码伦伦中文| 99视频在线免费看| 日韩国产欧美亚洲v片| 国产亚洲综合网曝门系列| 日韩视频在线精品视频免费观看| 亚洲av无码日韩av无码网站冲| 自拍偷自拍亚洲精品情侣| 全免费毛片在线播放| 久香草视频在线观看免费| 亚洲福利一区二区三区| 亚洲А∨精品天堂在线|