Задам вопрос в контексте недавно созданной темы:
http://www.flasher.ru/forum/showthread.php?t=206574
Ниже описан применяемый мной алгоритм, но главный вопрос: почему при трейсе 'rand num' не совпадают с 'res num'? Как сделать, чтобы совпадали и логика, заложенная ниже работала верно?

Код AS3:
import flash.events.Event;
var objNum:Number = 10;
var objArr:Array = new Array();
var enabledObjArr:Array = new Array();
var prevObjArr:Array = new Array();
//
var entFrParam:Number = 0;
var entFrParamMax:Number = 60;
function mainFunc(e:Event):void
{
var i:int;
//
if (entFrParam++ == entFrParamMax)
{
trace("\n\n///////// rand num:")
//
entFrParam = 0;
//
prevObjArr = getRandElements(objArr,4,prevObjArr);
//
for (i = 0; i < prevObjArr.length; i++)
{
//trace(prevObjArr[i].name)
enabledObjArr.push(prevObjArr[i]);
//
trace(prevObjArr[i].name);
}
trace("///////// res num:")
}
//
for (i = 0; i < enabledObjArr.length; i++)
{
process(enabledObjArr[i], 60);
//
if (enabledObjArr[i].degree >= 360)
{
trace(enabledObjArr[i].name);
//
enabledObjArr.shift();
}
}
}
function getRandElements(arr:Array, n:int, exclude:Array):Array
{
var i:int;
var tmp:Array = arr.concat();
var res:Array = [];
// убираем исключаемые
for (i = 0; i < exclude.length; i++)
{
tmp.splice(tmp.indexOf(exclude[i]), 1);
}
// выбираем из оставшихся рандомно
for (i = 0; i < n; i++)
{
var rnd:int = Math.random() * tmp.length;
res.push(tmp[rnd]);
tmp.splice(rnd, 1);
}
// возвращаем нужный массив
return res;
}
function process(obj:Object, speed:Number)
{
obj.degree += speed;
}
for (var i = 0; i < objNum; i++)
{
objArr[i] = new Object();
objArr[i].name = i;
objArr[i].degree = 0;
}
//
this.addEventListener(Event.ENTER_FRAME, mainFunc);