В общем я набросал нечто. Конечно получилось гадко и неоптимально ни разу ну уж лучше так чем никак. Не сомневаюсь что можно довести до ума если немного попыхтеть. В общем прошу любить и жаловать

Код AS1/AS2:
var st:Number=40;//=ширина=высота атачимого мувиклипа
var prilip:Number=1;//сколько мувиклипов должны прилипать
i=Math.floor(Stage.width/st);
j=Math.floor(Stage.height/st);
var arr:Array=[];
var znak1:Number=null;
var znak=0;
for(var y=0; y<i; y++){
arr[y]=[];
if(znak==0){
znak=1;
} else if(znak==1){
znak=0;
}
znak1=znak;
for(var z=0; z<j; z++){
if(znak==0){
znak=1;
} else if(znak==1){
znak=0;
}
if(znak==1){
arr[y][z]=attachMovie("kub","kub"+y+z,getNextHighestDepth(),{_x:y*st, _y:z*st});
arr[y][z].defaultX=arr[y][z]._x;
arr[y][z].defaultY=arr[y][z]._y;
arr[y][z].defaultMesto=true;
}
}
znak=znak1;
}
onMouseMove=function():Void{
i=Math.round(_xmouse/st);
j=Math.round(_ymouse/st);
for(var y=i-prilip;y<i+prilip;y++){
for(var z=j-prilip;z<j+prilip;z++){
if(arr[y][z]!=undefined){
arr[y][z]._x=_xmouse;
arr[y][z]._y=_ymouse;
arr[y][z].defaultMesto=false;
}
}
}
defaultMove();
}
function defaultMove():Void{
for(var i=0; i<arr.length; i++){
for(var j=0; j<arr[i].length; j++){
if(arr[i][j].defaultMesto==false){
if(arr[i][j].defaultX>arr[i][j]._x){
arr[i][j]._x++;
} else if(arr[i][j].defaultX<arr[i][j]._x){
arr[i][j]._x--;
}
if(arr[i][j].defaultY>arr[i][j]._y){
arr[i][j]._y++;
} else if(arr[i][j].defaultY<arr[i][j]._y){
arr[i][j]._y--;
}
rX=Math.abs(arr[i][j].defaultX-arr[i][j]._x);
rY=Math.abs(arr[i][j].defaultY-arr[i][j]._y);
if(rX+rY<st/4){
arr[i][j]._x=arr[i][j].defaultX;
arr[i][j]._y=arr[i][j].defaultY;
arr[i][j].defaultMesto=true;
}
}
}
}
}
Лично у меня сие уродство не тормозит ни разу. Время на писанину примерно минут 20 ушло.

Конечно не совсем по ТЗ, но идея вроде близка. Ну хотя бы отчасти
Добавлено через 6 часов 30 минут
Собственно способ ещё убыстрить работу этой ерунды это играться не со свойством defaultMesto которое я зачем то придумал, а писать например все сдвиженые мувиклипы в отдельный массив, и функцией defaultMove() возвращать обратно мувиклипы которые в этом массиве и сам массив планомерно чистить. Если не устраивает запуска функции при движении то можно запускать её с n-м интервалом. Вроде всё правильно. Ну а дальше только привести во вменямый вид сам код

По крайней мере я ощущаю что его можно сократить раза в два-три наверное без ущерба функциональности.