Код ActionScript 3 с задержкой в ​​один кадр

Я создаю марионетку для анимации, которую делаю. Я создал два пользовательских класса, которые наследуются от класса MovieClip. Один — голова, которую я анимирую, обращенная к камере, а другой — вид 3/4 той же головы. Я изменил оба конструктора, чтобы добавить прослушиватель событий, который вызывает функцию facRig, которая помогает мне анимировать головы, вызывая другие функции, такие как moveEyes(), moveMouth() и т. д.

public function _F__MichaelFULLHEAD() {
    super();
    faceRig("OverLoad"); //<--bug workaround
    this.gotoAndPlay(MovieClip(root).currentFrame); //Sync movieclips with timeline
    addEventListener(Event.ENTER_FRAME,faceRig);
}

Однако функция всегда вызывается через один кадр после появления MovieClip на временной шкале. Эта задержка делает анимацию невозможной, потому что мне приходится постоянно переключаться между видом спереди и видом 3/4 (я переключаюсь, создавая новый ключевой кадр на временной шкале и перетаскивая символ из библиотеки). Каждый раз, когда я переключаюсь, есть один кадр, где рот не говорит, а глаза не двигаются.

«Обходной путь» решает проблему. Теперь, когда в первый раз какая-либо голова появляется на сцене, она сразу же начинает анимироваться, но если я переключаюсь с вида спереди на вид 3/4 обратно на вид спереди, вид спереди снова задерживается.

Я подозревал, что это может быть связано с тем, что конструктор больше не запускается, поэтому я попытался сделать каждый экземпляр головок уникальным, назвав их frontHead1 и frontHead2 в поле свойств объекта, однако это совсем не помогло.


person user2446450    schedule 06.06.2013    source источник


Ответы (1)


Я нашел ответ на свою проблему:

public function _F__MichaelFULLHEAD() {
    super();
    //this.gotoAndPlay(MovieClip(root).currentFrame); << Moved this to inside faceRig
    addEventListener(Event.ENTER_FRAME,faceRig);
    addEventListener(Event.ADDED,faceRig);
}

Очевидно, Event.ADDED запускается перед Event.ENTER_FRAME, что противоречит тому, что я думал, что знал о том, как работает Event.ENTER_FRAME. Теперь все работает как надо.

person user2446450    schedule 07.06.2013