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 объектах это не так уж и сложно, но если вы увеличите масштаб, вам определенно захочется использовать одного слушателя.

Другие вопросы по тегам