注意:デスクトップ背景画像はswf埋め込み(MacDock.as)、アイコン画像はswf外部から読み込み(Icon.as)。

MacDock.as (メインクラス)
package {
    import flash.display.Sprite;
    import flash.display.Bitmap;

    [SWF(width="550", height="400", backgroundColor="0x0", frameRate="20")]
    public class MacDock extends Sprite{
        [(source="img/mac_desktop.jpg")]
        private var IMG:Class;
        
        public function MacDock(){
            var bmp:Bitmap = new IMG();
            addChild(bmp);
            var spr:DocBody = new DocBody();
            
            //must be tuned
            spr.y = stage.stageHeight - 40;
            addChild(spr);
        }
    }
}
DockBody.as (ドック部分全体)
package{
    import flash.display.Sprite;
    import flash.display.Shape;
    import flash.events.MouseEvent;
    
    public class DocBody extends Sprite{
        private var chaAry:Array;
        
        //These must be tuned upon image size
        private static const GRID_SPACE:Number = 30;
        private static const OFFSET:Number = 110;
        
        public function DocBody(){
            
            //Dock rectangle
            var doc:Shape = new Shape();
            doc.graphics.beginFill(0xCCCCCC,1);
            doc.graphics.moveTo(30,10);
            doc.graphics.lineTo(10,50);
            doc.graphics.lineTo(540,50);
            doc.graphics.lineTo(520,10);
            doc.graphics.endFill();
            addChild(doc);
            
            //Icon images
            chaAry = new Array();
            var icon1:Icon = new Icon("img/c1.png");
            chaAry.push(icon1);
            var icon2:Icon = new Icon("img/c2.png");
            chaAry.push(icon2);
            var icon3:Icon = new Icon("img/c3.png");
            chaAry.push(icon3);
            var icon4:Icon = new Icon("img/c4.png");
            chaAry.push(icon4);
            var icon5:Icon = new Icon("img/c5.png");
            chaAry.push(icon5);
            var icon6:Icon = new Icon("img/c6.png");
            chaAry.push(icon6);
            var icon7:Icon = new Icon("img/c7.png");
            chaAry.push(icon7);
            var icon8:Icon = new Icon("img/c8.png");
            chaAry.push(icon8);
            var icon9:Icon = new Icon("img/c9.png");
            chaAry.push(icon9);
            var icon10:Icon = new Icon("img/c10.png");
            chaAry.push(icon10);
            var icon11:Icon = new Icon("img/c11.png");
            chaAry.push(icon11);
            var icon12:Icon = new Icon("img/c12.png");
            chaAry.push(icon12);
            
            for (var i:int=0; i<chaAry.length; i++){
                chaAry[i].x = OFFSET + i*GRID_SPACE;
                chaAry[i].y = GRID_SPACE;
                addChild(chaAry[i]);
            }
            
            addEventListener(MouseEvent.MOUSE_OVER,onMouseOver);
            addEventListener(MouseEvent.MOUSE_OUT,onMouseOut);
        }
        
        private function onMouseOver(e:MouseEvent):void{
            for (var i:int; i<chaAry.length; i++){
                chaAry[i].flgMouse = true;
            }
        }
        
        private function onMouseOut(e:MouseEvent):void{
            for (var i:int; i<chaAry.length; i++){
                chaAry[i].flgMouse = false;
            }
        }
    }
}
Icon.as (各アイコン)
package{
    import flash.display.Sprite;
    import flash.display.Loader;
    import flash.net.URLRequest;
    import flash.events.Event;
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    //import flash.utils.setInterval;
    import flash.filters.ColorMatrixFilter;
    
    public class Icon extends Sprite{
        private var img:Bitmap;
        private var initialX:Number;
        public var flgMouse:Boolean;
        
        public function Icon(str:String){
            img = new Bitmap();
            var loader:Loader = new Loader();
            loader.contentLoaderInfo.addEventListener(Event.INIT,init);
            loader.load(new URLRequest(str));
            
            function init(e:Event):void{
                img = e.target.content;
                img.x = -img.bitmapData.width/2;
                img.y = -img.bitmapData.height;
                addChild(img);
                
                //Reflected image
                var bmpR:BitmapData = img.bitmapData.clone();
                var imgR:Bitmap = new Bitmap(bmpR);
                imgR.x = img.x;
                imgR.y = 60;
                imgR.scaleY = -1;
                addChild(imgR);
                imgR.filters = [createFilter(0.3)];
                
                //Memorize the initial position of the class
                initialX = x;
                addEventListener(Event.ENTER_FRAME,changeScale);
            }
            
            function createFilter(ratio:Number):ColorMatrixFilter{
                var matrix:Array = new Array();
                matrix = matrix.concat([ratio,0,0,0,0]);    //R
                matrix = matrix.concat([0,ratio,0,0,0]);    //G
                matrix = matrix.concat([0,0,ratio,0,0]);    //B
                matrix = matrix.concat([0,0,0,ratio,0]);    //alpha
                return new ColorMatrixFilter(matrix);
            }
        }
        
        private function changeScale(e:Event):void{
            //Note that "mouseX" is x-coordinate from the origin of the Icon class
            var dx:Number = parent.mouseX - initialX;
            var dy:Number = mouseY;
            var moveX:Number;
            
            //These must be tuned
            var x0:Number = 50;    //Threshould
            var sMax:Number = 1.2;    //Maximum scale
            var sMin:Number = 0.5;    //Minimum scale
            
            if (flgMouse){
                if (Math.abs(dx) < x0){
                    moveX = x0 - Math.abs(dx);
                    if (dx >= 0){
                        x = initialX - x0 + moveX;
                        scaleX = scaleY = (sMin - sMax)*dx/x0 + sMax;
                    }
                    else {
                        x = initialX + x0 - moveX;
                        scaleX = scaleY = -(sMin - sMax)*dx/x0 + sMax;
                    }
                }
                else {
                    scaleX = scaleY = sMin;
                    if (dx >= 0){
                        x = initialX - x0;
                    }
                    else{
                        x = initialX + x0;
                    }
                }
            }
            else {
                x = initialX;
                scaleX = scaleY = sMin;
            }
        }    
    }
}
Powered by blog Boreal Kiss 2008.