package { import flash.display.Sprite; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.utils.getTimer; import flash.display.DisplayObject; import flash.events.MouseEvent; import flash.text.TextField; public class GridCollision2 extends Sprite { private const GRID_SIZE:Number=20; private const RADIUS:Number=10; private var _balls:Vector.;//这里用Vector代替了Array private var _grid:CollisionGrid; private var _numBalls:int=50; private var _text:TextField; public function GridCollision2() { stage.align=StageAlign.TOP_LEFT; stage.scaleMode=StageScaleMode.NO_SCALE; _text = new TextField(); _text.background = true; _text.backgroundColor = 0xffff99; _text.width = 135; _text.height = 20; _text.alpha = 0.9; _grid=new CollisionGrid(stage.stageWidth,stage.stageHeight,GRID_SIZE); _grid.drawGrid(graphics); makeBalls(); addChild(_text); test(); stage.addEventListener(MouseEvent.CLICK,stageClick); } private function stageClick(e:MouseEvent):void { test(true); } private function test(isRestart:Boolean=false):void { if (isRestart) { for (var i:int=0; i<_numBalls; i++) { var ball:Ball=_balls[i] as Ball; ball.x=Math.random()*stage.stageWidth; ball.y=Math.random()*stage.stageHeight; ball.color = 0xffffff; } } var startTime:int; var elapsed:int; startTime=getTimer(); for (i=0; i<10; i++) { _grid.assign(_balls);//将所有需要检测的ball放入_grid.checks var numChecks:int=_grid.checks.length; for (var j:int=0; j(_numBalls); for (var i:int=0; i<_numBalls; i++) { var ball:Ball=new Ball(RADIUS); ball.x=Math.random()*stage.stageWidth; ball.y=Math.random()*stage.stageHeight; ball.alpha = 0.8; addChild(ball); _balls[i]=ball; } } //检测碰撞 private function checkCollision(ballA:Ball,ballB:Ball):void { var dx:Number=ballB.x-ballA.x; var dy:Number=ballB.y-ballA.y; var dist:Number=Math.sqrt(dx*dx+dy*dy); if (dist