AS3: цикл в энтерфрейме / с
У меня есть 6 объектов, которые должны двигаться беспорядочно и непрерывно. Эффективно ли вводить каждый объект отдельно или 1 ввод с циклом, адресованным всем объектам.
var myObjArray:Array = new Array(); // Contains 6 movieclip objects
for(var i=1; i<=6; i++)
{
var Square:MoveObject = new MoveObject();
Square.addEventListener(Event.ENTER_FRAME, Square.go);
myObjArray[i] = Square;
}
public Class MoveObject extends Movieclip{
public function go(e:Event):void
{
this.x++;
}
}
ИЛИ мы перебираем объекты в одной функции EnterFrame?
1 ответ
Каждый вызов функции имеет снижение производительности - поэтому люди говорят о "встраивании" функций в критические участки кода (встраивание содержимого функции вместо выполнения вызова функции).
В таком случае лучше всего добавить только одного слушателя, и в этом цикле слушателя будут все 6 объектов. Еще один совет - если вы выполняете цикл в обратном порядке, вы вызываете функцию.length() в массиве только один раз, тогда как если вы выполняете итерацию с 0-длины, цикл for должен вызывать функцию длины каждый раз, чтобы определить, выполняется ли условие встретились.
function enterFrame(e:Event):void
{
for (var i:int=myObjArray.length-1; i>=0; i--) {
myObjArray[i].x++;
}
}
Конечно, есть и другие оптимизации (некоторые люди говорят - я быстрее, чем я, но я не уверен, что это верно для ActionScript).
Конечно, при 6 объектах это не так уж и сложно, но если вы увеличите масштаб, вам определенно захочется использовать одного слушателя.