Нашел хороший исходник по столкновению мячей, но там изначально сталкиваются 4 мяча уже выложенные на сцену. Попытался переделать чтобы мячи появлялись при нажатии мыши и любое количество, но мячи просто стоят теперь.
Первоначальный код:

Код AS1/AS2:
var col:Number=4;//Количество мячей
MovieClip.prototype.kick=function(ball){
var fi=Math.atan2(ball.y-this.y,ball.x-this.x);
var adir=Math.atan2(this.vy,this.vx);
var bdir=Math.atan2(ball.vy,ball.vx);
var av=Math.sqrt(this.vx*this.vx+this.vy*this.vy);
var bv=Math.sqrt(ball.vx*ball.vx+ball.vy*ball.vy);
var vn=av*Math.sin(adir-fi+Math.PI/2)-bv*Math.sin(bdir-fi+Math.PI/2);
var dv1=-2*ball.m/(this.m+ball.m)*vn;
var dv2=2*this.m/(this.m+ball.m)*vn;
this.vx+=dv1*Math.cos(fi);
this.vy+=dv1*Math.sin(fi);
ball.vx+=dv2*Math.cos(fi);
ball.vy+=dv2*Math.sin(fi);
}
MovieClip.prototype.ballMove=function(){
for(var j=this.id+1;j<col;j++){
var other=balls[j];
var dx=this.x+this.vx-other.x-other.vx;
var dy=this.y+this.vy-other.y-other.vy;
if(Math.abs(dx)+Math.abs(dy)<this.r+other.r){
var fi=Math.atan2(dy,dx);
other._x=this.x-(this.r+other.r+1)*Math.cos(fi);
other._y=this.y-(this.r+other.r+1)*Math.sin(fi);
this.kick(other);
}
}
if(this.x+this.r+this.vx>200 || this.x-this.r+this.vx<0) this.vx*=-1
if(this.y+this.r+this.vy>80 || this.y+this.vy-this.r<0) this.vy*=-1
if(this.x+this.r>200)this._x=199-this.r;
if(this.x-this.r<0)this._x=this.r+1;
if(this.y+this.r>80)this._y=79-this.r;
if(this.y-this.r<0)this._y=this.r+1;
this.x=this._x+=this.vx;
this.y=this._y+=this.vy;
}
_root.onMouseUp=function(){
for( var i=0;i<col;i++) this['ball'+i].vx=this['ball'+i].vy=this["ball"+col].vx?0:2;
}
for(var i=0,balls=[];i<col;i++){
var b=this['ball'+i];
balls.push(b);
b.r=b._height/2;//Радиус
b.m=b.r//масса (условно)
b.id=i;
b.vx=b.vy=0;
b.x=b._x;
b.y=b._y;
b.onEnterFrame=ballMove;
}
Мои попытки

Код AS1/AS2:
var col:Number=0;//количество шаров
MovieClip.prototype.kick=function(ball){
//То же самое
}
MovieClip.prototype.ballMove=function(){
for(var j=this.id+1;j<col;j++){
//То же самое
}
_root.onMouseDown = function(){
col+=1;
this.attachMovie("ball","ball"+col,col);
this["ball"+col]._height=Math.random()*20+15;
this["ball"+col]._width=this["ball"+col]._height;
this["ball"+col]._y=_ymouse;
this["ball"+col]._x=_xmouse;
}
_root.onMouseUp = function(){
for( var i=0;i<4;i++) this['ball'+i].vx=this['ball'+i].vy=this["ball"+col].vx?0:2;
}
_root.onEnterFrame=function(){
for(var i=0,balls=[];i<col;i++){
var b=this['ball'+i];
balls.push(b);
b.r=b._height/2;//Радиус
b.m=b.r//масса (условно)
b.id=i;
b.vx=0;
b.vy=0;
b.x=b._x;
b.y=b._y;
b.ballMove;
}
}