2014-10-24 4 views
0

В течение жизни я не могу остановить это событие. Я первоначально написал этот код в AS3, но когда мой менеджер проекта дал мне спецификации, они хотели его в AS2. Не очень большое дело, большая часть кода просто нуждалась в некоторых настройках.AS2: Как вы удаляете onEnterFrame?

Однако в этой части я играю небольшую часть мувиклипа назад (как анимацию выхода, противоположную ее интро-анимации). В AS3 он прошел гладко:

function playExit() { 
    this.gotoAndStop(MovieClip(root).exitLabel); 
    this.addEventListener(Event.ENTER_FRAME, playBackwards); 
} 
function playBackwards(e:Event) { 
    this.prevFrame(); 
    if(this.currentFrame == 1) { 
      this.removeEventListener(Event.ENTER_FRAME, playBackwards); 
      finishExit(); 
    } 
} 

Теперь я пытаюсь преобразовать его в AS2. Похоже, что это должно работа, как это:

function playExit() { 
    this.gotoAndStop(_root.exitLabel); 
    this.onEnterFrame = function() { 
      playBackwards(); 
    } 
} 
function playBackwards() { 
    trace('Backwaaaaaaaaards, woooo!!'); 
    this.prevFrame(); 
    if(this.currentFrame == 1) { 
      delete this.onEnterFrame; 
      trace('Backwards Completed.'); 
      finishExit(); 
    } 
} 

Тем не менее, кажется, что мой маленький счастливый назад след заявление все еще работает (при этом не удаляются), даже после того, как мой «Backwards Completed». отображается на выходе. Поэтому, когда циклы анимации, она даже не появляется вообще, потому что она все еще пытается бежать назад. Ошибок компиляции нет, и я не получаю никаких других ошибок. Я что-то упускаю?

Настройки публикации для Flash Player 8, AS2.

Прошу вас, спасибо.

Редактировать: I событие пробовал это так, потому что я думал, что это может быть проблема с областью, но это только ухудшило ее, потому что она даже не играла в обратном направлении (мувиклип остался на сцене).

function playExit() { 
    this.gotoAndStop(_root.exitLabel); 
    this.onEnterFrame = function() { 
      trace('Backwaaaaaaaaards, woooo!!'); 
      this.prevFrame(); 
      if(this.currentFrame == 1) { 
       delete this.onEnterFrame; 
       trace('Backwards Completed.'); 
       finishExit(); 
      } 
    } 
} 

ответ

0

Я идиот. Это всегда происходит после того, как я поставил вопрос.

Оказывается, что «Назад завершена». никогда не останавливался в моем выпуске (я побежал ctrl F, чтобы его найти, и его там не было, это было другое заявление о следах, которое заставило меня поверить, что оно появилось).

Во всяком случае, я забыл изменить

this.currentFrame 

в

this._currentFrame 

Еще раз спасибо, ребята.

+0

Опечатка здесь - this._currentframe (с небольшим f) – Aspiro

+0

Нет, это так же, как с капиталом F. «currentframe» не является ключевым словом; он чувствителен к регистру. Однако, спасибо. – Tessa

+0

Нет, вы ошибаетесь. В AC2 правый - это _currentframe. currentFrame - свойство AC3. – Aspiro