package { import flash.display.Sprite; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.events.MouseEvent; import flash.text.TextField; public class GridCollision extends Sprite { private const GRID_SIZE:Number=30;//单元格大小(这里设置为小于的直径,即正好容纳一个小球) private const RADIUS:Number=15;//小球的半径 private var _balls:Array; private var _grid:Array; private var _numBalls:int=100;//小球数量 private var _numChecks:int=0;//检测次数 private var _txt:TextField = new TextField(); public function GridCollision() { stage.align=StageAlign.TOP_LEFT; stage.scaleMode=StageScaleMode.NO_SCALE; makeBalls();//创建一堆小球 makeGrid();// drawGrid(); assignBallsToGrid(); checkGrid(); //显示计数器 trace(_numChecks); addChild(_txt); _txt.background = true; _txt.backgroundColor=0xffff99; _txt.height = 20; _txt.width = 30; _txt.alpha = 0.7; stage.addEventListener(MouseEvent.MOUSE_DOWN,mouseDownClick); } private function mouseDownClick(e:MouseEvent):void{ for (var i:int=0; i<_numBalls; i++) { var ball:Ball=_balls[i]; ball.x=Math.random()*stage.stageWidth; ball.y=Math.random()*stage.stageHeight; ball.color = 0xffffff; } _numChecks=0; makeGrid();// drawGrid(); assignBallsToGrid(); checkGrid(); } //创建_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); _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