Forked from: terra1119's forked from: flash on 2009-12-3 diff:36 forked from: forked from: flash on 2009-12-3 terra1119 forked:1favorite:0lines:100license : MIT License modified : 2010-01-09 17:31:39 Embed Tweet // forked from terra1119's forked from: flash on 2009-12-3 // forked from terra1119's flash on 2009-12-3 package { import flash.display.Sprite; import flash.events.Event; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.events.MouseEvent; public class Bouncing extends Sprite { private var ball:Ball; private var vx:Number; private var vy:Number; private var left:Number; private var right:Number; private var top:Number; private var bottom:Number; private var bounce:Number = -0.7; private var gravity:Number = .5; private var oldX:Number; private var oldY:Number; public function Bouncing() { init(); } private function init():void { stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; ball = new Ball(); ball.x = stage.stageWidth / 2; ball.y = stage.stageHeight / 2; vx = Math.random() * 10 - 5; vy = -10; addChild(ball); ball.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown); addEventListener(Event.ENTER_FRAME, onEnterFrame); } private function onMouseDown(e:MouseEvent):void { oldX = ball.x; oldY = ball.y; stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp); ball.startDrag(); removeEventListener(Event.ENTER_FRAME, onEnterFrame); addEventListener(Event.ENTER_FRAME, trackVelocity); } private function trackVelocity(e:Event):void { vx = ball.x - oldX; vy = ball.y - oldY; oldX = ball.x; oldY = ball.y; } private function onMouseUp(e:MouseEvent):void { stage.removeEventListener(MouseEvent.MOUSE_UP, onMouseUp); ball.stopDrag(); removeEventListener(Event.ENTER_FRAME, trackVelocity); addEventListener(Event.ENTER_FRAME, onEnterFrame); } private function onEnterFrame(e:Event):void { vy += gravity; ball.x += vx; ball.y += vy; left = 0; right = stage.stageWidth; top = 0; bottom = stage.stageHeight; if (ball.x + ball.radius > right) { ball.x = right - ball.radius; vx *= bounce; } else if (ball.x - ball.radius < left) { ball.x = left + ball.radius; vx *= bounce; } if (ball.y + ball.radius > bottom) { ball.y = bottom - ball.radius; vy *= bounce; } else if (ball.y - ball.radius < top) { ball.y = top + ball.radius; vy *= bounce; } } } } import flash.display.Sprite; class Ball extends Sprite { public var radius:Number; public var color:uint; public var vx:Number; public var vy:Number; public function Ball(radius:Number=40,color:uint=0xff0000){ this.radius = radius; this.color = color; init(); } private function init():void{ graphics.beginFill(color); graphics.drawCircle(0, 0, radius); graphics.endFill(); } } Code Fullscreen Preview Fullscreen MouseEvent.ENTER_FRAME removeEventListener MouseEvent.MOUSE_UP stopDrag startDrag MouseEvent MouseEvent.MOUSE_DOWN addEventListener addChild Math.random uint Sprite Number sort new page view favorite forked pv223 forked from: forked from: fork.. terra1119 forked:1 favorite:0lines:57 (diff:56)