package { import flash.display.Sprite; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.display.DisplayObject; import flash.events.Event; public class GridCollision3 extends Sprite { private const GRID_SIZE:Number=20; private const RADIUS:Number=10; private var _balls:Vector.; private var _grid:CollisionGrid; private var _numBalls:int=100; public function GridCollision3() { stage.align=StageAlign.TOP_LEFT; stage.scaleMode=StageScaleMode.NO_SCALE; _grid=new CollisionGrid(stage.stageWidth,stage.stageHeight,GRID_SIZE); _grid.drawGrid(graphics); makeBalls(); addEventListener(Event.ENTER_FRAME, onEnterFrame); } function onEnterFrame(event:Event):void { updateBalls(); _grid.assign(_balls); var numChecks:int=_grid.checks.length; for (var j:int = 0; j < numChecks; j += 2) { checkCollision(_grid.checks[j] as Ball, _grid.checks[j + 1] as Ball); } } private function makeBalls():void { _balls=new Vector.(_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.vx=Math.random()*4-2; ball.vy=Math.random()*4-2; addChild(ball); _balls[i]=ball; } } private function updateBalls():void { for (var i:int = 0; i < _numBalls; i++) { var ball:Ball=_balls[i] as Ball; ball.update(); if (ball.x stage.stageWidth - RADIUS) { ball.x=stage.stageWidth-RADIUS; ball.vx*=-1; } if (ball.y stage.stageHeight - RADIUS) { ball.y=stage.stageHeight-RADIUS; ball.vy*=-1; } ball.color=0xffffff; } } 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