package { import flash.utils.Timer; import flash.events.TimerEvent; import flash.events.MouseEvent; import flash.display.Stage; import flash.display.StageScaleMode; import flash.display.StageAlign; import flash.display.Sprite; [SWF(width="500", height="375", backgroundColor="#AA7777")] public class TestBall extends Sprite{ [Embed(source="bin/background.swf", symbol="sunburst")] private var Background:Class; private var myBall:BallClip; private var moveTimer:Timer; private var scoreView:Score; private var highScoreView:Score; private var xv:Number = 0; private var yv:Number = 0; private var score:int = 0; private var highScore:int = 0; private var oldx:Number; private var oldy:Number; public function TestBall(){ stage.align = StageAlign.TOP_LEFT; stage.scaleMode = StageScaleMode.NO_SCALE; stage.frameRate = 50; var sunburst:Sprite = new Background(); sunburst.width=500; sunburst.height=650; addChild(sunburst); myBall = new BallClip(this); scoreView = new Score(5,25, "score"); highScoreView = new Score(5,10, "high score"); addChild(myBall); addChild(scoreView); addChild(highScoreView); moveTimer = new Timer(20); moveTimer.addEventListener(TimerEvent.TIMER, myBall.step); moveTimer.start(); } public function changeScore(sc:int):void{ if(sc<0){ score=0; }else{ score+=sc; } scoreView.update(score); if(score>highScore){ highScoreView.update(score); highScore=score; } } } } import flash.display.Sprite; import flash.events.TimerEvent; import flash.events.MouseEvent; import flash.text.*; class BallClip extends Sprite{ public var xv:Number; public var yv:Number; private var controller:TestBall; private var gravity:Number = 0.2; private var friction:Number = 0.99; private var bounciness:Number = 0.95; private var kickiness:Number = 0.7; public function BallClip(myRoot:TestBall){ controller = myRoot; addEventListener( MouseEvent.MOUSE_DOWN , mouseDownHandler ); graphics.beginFill(0x000000, 1); graphics.drawCircle(0,0,25); graphics.endFill(); x = 250; y = 100; xv = Math.random()*5; yv = Math.random()*5; } public function mouseDownHandler(ev:MouseEvent):void{ yv = (y - controller.mouseY)*kickiness; xv = (x - controller.mouseX)*kickiness; if (yv>0){ yv = -1; } controller.changeScore(1); } public function step(timeEvent:TimerEvent):void{ yv += gravity; xv*=friction; yv*=friction; if ( (x + xv > 480)|| ( x + xv < 20 )){ xv *= -bounciness; } if ( y + yv > 355 ){ yv *= -bounciness; controller.changeScore(-1); } if ( y + yv < 20 ){ yv *= -bounciness; } x += xv; y += yv; } } class Score extends Sprite{ private var scoreText:TextField; private var txt:String; public function Score(xpos:int, ypos:int, intxt:String){ txt=intxt; scoreText = new TextField(); scoreText.type = TextFieldType.DYNAMIC; scoreText.width = 120; var format:TextFormat = new TextFormat(); format.font = "Verdana"; format.color = 0xFFFFFF; format.size = 15; scoreText.defaultTextFormat = format; scoreText.text = txt+": 0"; scoreText.x = xpos; scoreText.y = ypos; addChild(scoreText); } public function update(sc:int):void{ scoreText.text = txt+": "+sc; } }