package { import flash.display.Sprite; import flash.events.Event; import flash.display.StageScaleMode; import flash.display.StageAlign; import flash.geom.Rectangle; import flash.events.MouseEvent; import flash.ui.Mouse; import flash.ui.MouseCursor; public class MultiAngleBounce extends Sprite { private var ball:Ball; private var lines:Array; private var numLines:uint=5; private var gravity:Number=0.3; private var bounce:Number=-0.6; public function MultiAngleBounce() { init(); } private function init():void { stage.scaleMode=StageScaleMode.NO_SCALE; stage.align=StageAlign.TOP_LEFT; ball=new Ball(20); addChild(ball); ball.x=100; ball.y=50; // 创建 5 个 line 影片 lines = new Array(); for (var i:uint = 0; i < numLines; i++) { var line:Sprite = new Sprite(); line.graphics.lineStyle(1); line.graphics.moveTo(-50, 0); line.graphics.lineTo(50, 0); addChild(line); lines.push(line); } // 放置并旋转 lines[0].x=100; lines[0].y=100; lines[0].rotation=30; lines[1].x=100; lines[1].y=230; lines[1].rotation=45; lines[2].x=250; lines[2].y=180; lines[2].rotation=-30; lines[3].x=150; lines[3].y=330; lines[3].rotation=10; lines[4].x=230; lines[4].y=250; lines[4].rotation=-30; addEventListener(Event.ENTER_FRAME, onEnterFrame); ball.addEventListener(MouseEvent.MOUSE_DOWN,MouseDownHandler); ball.addEventListener(MouseEvent.MOUSE_OVER,MouseOverHandler); stage.addEventListener(MouseEvent.MOUSE_UP,MouseUpHandler); } function MouseOverHandler(e:MouseEvent):void { Mouse.cursor=MouseCursor.HAND; } function MouseDownHandler(e:MouseEvent):void { Mouse.cursor=MouseCursor.HAND; var bounds:Rectangle = new Rectangle(ball.width,ball.height,stage.stageWidth-2*ball.width,stage.stageHeight-2*ball.height); ball.startDrag(true,bounds); removeEventListener(Event.ENTER_FRAME, onEnterFrame); } function MouseUpHandler(e:MouseEvent):void { ball.stopDrag(); ball.vx=0; ball.vy=0; Mouse.cursor=MouseCursor.AUTO; addEventListener(Event.ENTER_FRAME, onEnterFrame); } private function onEnterFrame(event:Event):void { // normal motion code ball.vy+=gravity; ball.x+=ball.vx; ball.y+=ball.vy; // 舞台四周的反弹 if (ball.x+ball.radius>stage.stageWidth) { ball.x=stage.stageWidth-ball.radius; ball.vx*=bounce; } else if (ball.x - ball.radius < 0) { ball.x=ball.radius; ball.vx*=bounce; } if (ball.y+ball.radius>stage.stageHeight) { ball.y=stage.stageHeight-ball.radius; ball.vy*=bounce; } else if (ball.y - ball.radius < 0) { ball.y=ball.radius; ball.vy*=bounce; } // 检查每条线 for (var i:uint = 0; i < numLines; i++) { checkLine(lines[i]); } } private function checkLine(line:Sprite):void { // 获得 line 的边界 var bounds:Rectangle=line.getBounds(this); if (ball.x>bounds.left&&ball.x- ball.height/2&&y2