使用DropShadowFilter实现拖动时的动态阴影
Posted by horidream under 例子【Samples】
相关代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | //导入Tweener类 import caurina.transitions.Tweener; //声明一个Object,它的初始x,y参数与红色广场sq的横纵坐标相同 var obj:Object={x:sq.x,y:sq.y}; //声明一个布尔值isDraging用作标志 var isDraging:Boolean=false; //定义阴影滤镜 var filter:DropShadowFilter=new DropShadowFilter(0,0,0,0.8); filter.quality = 2; //注册侦听器,分别侦听鼠标按下、移动、松开三种状态 sq.addEventListener(MouseEvent.MOUSE_DOWN,beginDrag); stage.addEventListener(MouseEvent.MOUSE_MOVE,begingMove); stage.addEventListener(MouseEvent.MOUSE_UP,endDrag); //注册播放头事件,用于更新阴影 stage.addEventListener(Event.ENTER_FRAME,renew); //_________________________________________以下为三个鼠标侦听器 //当鼠标按下时开始拖放目标,并将标志位置为true function beginDrag(e:MouseEvent):void { e.target.startDrag(false); isDraging=true; } //鼠标移动时,当拖放状态为true时,更新滤镜参数 function begingMove(e:MouseEvent):void { if (isDraging) { renderFilters(); e.updateAfterEvent(); } } //当鼠标放开左键时,停止拖放状态,并将标志位置回false; function endDrag(e:MouseEvent):void { sq.stopDrag(); isDraging=false; } //使用Tweener类缓动obj的参数,使之以红色方块的新坐标为目标缓动 function renderFilters() { Tweener.addTween(obj,{x:sq.x,y:sq.y,time:.2}); } //播放头事件,通过数学方法计算阴影的距离、角度和模糊程度 function renew(e:Event):void { var d:Number = Math.min(Point.distance(new Point(obj.x,obj.y),new Point(sq.x,sq.y)),16); filter.distance= d; filter.angle = Math.atan2((obj.y-sq.y),(obj.x-sq.x))*180/Math.PI; filter.blurX = filter.blurY = d; sq.filters=[filter]; } |
