[Flash MX 2004, Actionscript 2.0]

Ciao a tutti,
vorrei realizzare una cosa di questo tipo:
su uno stage vorrei "buttare" n movieclip dove n è un numero tra 5 e 15, questi movieclip sono semplicemente dei box colorati che si dispongono random. come in figura



... e la parte semplice è finita

Ora arriva il difficile:
I movieclip non si devono sovrapporre ma rimbalzare tra loro, sbattere è disporsi sullo stage, in pratica, rimabalzano ma hanno una frizione che li rallentano.


E qui sono un po' in panico, mi sono studiato formule di Newton varie, visto dei tutorial e cercato in giro , ma l'effetto di "scontro" tra i quadrati non riesco a capire come farlo. Non capisco come posso calcolare la nuova direzione e la nuova velocità di un movieclip dopo lo scontro come in figura:



Ho fatto questa PROVA dove ci sono 2 quadrati uno soggetto a gravità e uno no.
entrambi rimbalzano , frizionano con i lati dello stage e questa è già x me una vittoria. vorrei che facesseto lo stesso tra loro ho provato ad usare l'hitTest ma sono un po' in alto mare:

Il concetto è molto semplice: per ogni istanza di MC ho applicato i seguenti actionscript:

Codice:
onClipEvent(load) { 
//inizializzo gli oggetti
	var vel:Object = { x: 0, y: 0 }; 
	var pos:Object = { x: _x, y: _y }; 
	var old:Object = { x: _x, y: _y }; 
	var radius:Number = this._width / 2; 
	var movie:Object = { width: 400, height: 300 }; 
	var dragging:Boolean = false; 
}
e poi con un EnterFrame gestisco il movimento


Codice:
onClipEvent(enterFrame) {
if(!dragging) { 
 
 	vel.y *= _root.friction; 
  	vel.x *= _root.friction;
  		 
  
	if( pos.y + radius > movie.height ) { 
                //controllo se sbatte contro il pavimento
		pos.y = movie.height - radius; 
		vel.y *= -_root.restitution; 
		vel.x *= _root.friction; 
	} 
	if( pos.x + radius > movie.width ) { 
                //controllo se sbatte contro i lati 
		pos.x = movie.width - radius; 
		vel.x *= -_root.restitution; 
	} 

	if&#40; pos.x < radius &#41; &#123; 
		pos.x = radius; 
		vel.x *= -_root.restitution; 
	&#125;
	
	if&#40;this.hitTest&#40;_root.Ball_MC&#41;&#41;&#123;
	//controllo se c'è sovrapposizione dei MC
               //QUI NON SO COME FARE PER GESTIRE IL RIMBALZO
		vel.y *= -_root.restitution; 
		vel.x *= _root.friction;
		pos.x += vel.x; 
  		pos.y += vel.y;  
	&#125;else&#123;
		pos.x += vel.x; 
  		pos.y += vel.y;
	&#125;


	// Now update the ACTUAL position of the ball... 
	_x = pos.x; 
	_y = pos.y; 
	
	
&#125;else&#123;
	//trace&#40;"draggo"&#41;;
    old.x = pos.x; 
    old.y = pos.y; 
    pos.x = _x; 
    pos.y = _y; 
    vel.x = &#40; pos.x - old.x &#41; / 2; 
    vel.y = &#40; pos.y - old.y &#41; / 2; 
  &#125;
Qualcuno ha mai affrontato una cosa simile? Mi sapete dare una mano?