注意:デスクトップ背景画像は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{ [Embed(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.