package { import flash.display.Sprite; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.events.MouseEvent; import flash.text.TextField; import fl.controls.Slider; import flash.utils.getTimer; import fl.events.SliderEvent; public class GridCollisionAdjust extends Sprite { private const GRID_SIZE:Number=20;//单元格大小(这里设置为小于的直径,即正好容纳一个小球) private const RADIUS:Number=10;//小球的半径 private var _balls:Array; private var _grid:Array; private var _numBalls:int=50;//小球数量 private var _txtGrid:TextField = new TextField(); private var _txtBasic:TextField = new TextField(); private var _slider:Slider = new Slider(); public function GridCollisionAdjust() { stage.align=StageAlign.TOP_LEFT; stage.scaleMode=StageScaleMode.NO_SCALE; makeGrid(); drawGrid(); addChild(_slider); addChild(_txtGrid); addChild(_txtBasic); test(); _slider.addEventListener(SliderEvent.THUMB_DRAG,sliderGrag); stage.addEventListener(MouseEvent.CLICK,stageClick); } private function test(isClear:Boolean=false):void { var i:int=0; if (isClear) { for (i=numChildren-1; i>=0; i--) { removeChild(getChildAt(i)); } _balls.length=0; } _txtGrid.background=_txtBasic.background=true; _txtGrid.backgroundColor=_txtBasic.backgroundColor=0xffff99; _txtBasic.height=_txtGrid.height=20; _txtBasic.width=_txtGrid.width=135; _txtBasic.alpha=_txtGrid.alpha=0.9; _txtBasic.x=stage.stageWidth-_txtBasic.width; _slider.maximum=300; _slider.minimum=30; _slider.snapInterval=10; _slider.y=10; _slider.value=_numBalls; _slider.width=200; _slider.x=stage.stageWidth/2-_slider.width/2; makeBalls();//创建一堆小球 var startTime:int; var elapsed:int; startTime=getTimer(); for (i=0; i<10; i++) { makeGrid(); assignBallsToGrid(); checkGrid(); } elapsed=getTimer()-startTime; trace("网格检测:",elapsed); _txtGrid.text=_numBalls+"个球网络检测:"+elapsed.toString(); startTime=getTimer(); for (i=0; i<10; i++) { basicCheck(); } elapsed=getTimer()-startTime; trace("两两检测:",elapsed); _txtBasic.text=_numBalls+"个球两两检测:"+elapsed.toString(); if (isClear) { addChild(_txtBasic); addChild(_txtGrid); addChild(_slider); } } private function sliderGrag(e:SliderEvent):void { _numBalls=e.value; trace("sliderGrag"); } private function stageClick(e:MouseEvent):void { trace("stageClick"); test(true); } //创建_numBalls个小球实例,并随机摆放到舞台上 private function makeBalls():void { _balls=new Array ; 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; addChild(ball); ball.alpha=0.5; _balls.push(ball); } } private function makeGrid():void { _grid=new Array ; for (var i:int=0; i=_grid.length) { return; } if (y2>=_grid[x2].length) { return; } var cell0:Array=_grid[x1][y1] as Array; var cell1:Array=_grid[x2][y2] as Array; // 检测当前格子和邻接格子内所有的对象 for (var i:int=0; i