package { import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import flash.geom.Rectangle; import flash.ui.Mouse; import flash.ui.MouseCursor; public class Spring1 extends Sprite { private var ball:Ball; private var spring:Number=0.02; private var targetX:Number=stage.stageWidth/2; private var rect:Rectangle; private var vx:Number=0; private var isDragging=false; public function Spring1() { init(); } private function init():void { ball=new Ball(10); addChild(ball); ball.x=20; ball.y=stage.stageHeight/2; addEventListener(Event.ENTER_FRAME, onEnterFrame); ball.addEventListener(MouseEvent.MOUSE_DOWN,MouseDownHandler); ball.addEventListener(MouseEvent.MOUSE_OVER,function(){Mouse.cursor = MouseCursor.HAND}); ball.addEventListener(MouseEvent.MOUSE_OUT,MouseOutHandler); stage.addEventListener(MouseEvent.MOUSE_UP,MouseUpHandler); //画辅助线 graphics.lineStyle(1); graphics.moveTo(ball.x,ball.y); graphics.lineTo(stage.stageWidth-ball.x,ball.y); graphics.moveTo(stage.stageWidth/2,ball.y-10); graphics.lineTo(stage.stageWidth/2,ball.y+10); rect=new Rectangle(ball.x,ball.y,stage.stageWidth-2*ball.x,0); } private function MouseOutHandler() { if (! isDragging) { Mouse.cursor=MouseCursor.AUTO; } } //开始拖动 private function MouseDownHandler(e:MouseEvent):void { ball.startDrag(true,rect); Mouse.cursor=MouseCursor.HAND; removeEventListener(Event.ENTER_FRAME, onEnterFrame); isDragging=true; } //结束拖动 private function MouseUpHandler(e:MouseEvent):void { ball.stopDrag(); addEventListener(Event.ENTER_FRAME, onEnterFrame); Mouse.cursor=MouseCursor.AUTO; isDragging=false; } private function onEnterFrame(event:Event):void { var dx:Number = targetX-ball.x; var ax:Number = dx*spring;//加速度与位移成正(反)比关系 vx += ax; vx *= 0.97;//摩擦系数 trace(ax,vx); ball.x+=vx; } } }