2013-02-21 2 views
0

У меня есть ученик, который работает над игрой Tower Defense в AS3 и имеет проблему, которая меня тошнит. Он использует hitTestObject, чтобы изменить направление движения клипа. MovieClip имеет собственную временную шкалу с фреймами для разных направлений, с которыми сталкивается объект, и связанный файл .as с кодом для поведения объекта.AS3 gotoAndStop заставляет объект удалять себя

Когда он называет gotoAndStop, чтобы изменить внутренний фрейм movieClip, удаленное событие запускается, но объект остается на экране и больше не перемещается.

Все мои поиски находят ответы об удалении объектов, но я ничего не видел о предотвращении удаления объекта.

Следующий код представляет собой цикл инициируется событием ENTER_FRAME в файле .as класса для объекта MovieClip:

private function eFrame(event:Event):void 
    { 

     if (_root.isPaused == false) 
     { 
      //MOVING THE ENEMY 
      this.x += speed * xDir; 
      this.y -= speed * yDir; 
      if (health <= 0) 
      { 
       _root.currency += 4; 

       this.parent.removeChild(this); 
      } 
      if (this.x > 770) 
      { 
       this.parent.removeChild(this); 
       _root.health -= 10; 
       _root.gotHit = true; 
      } 
      //checking if touching any invisible markers 
      for (var i:int=0; i<_root.upHolder.numChildren; i++) 
      { 
       //the process is very similar to the main guy's testing with other elements 
       var upMarker:DisplayObject = _root.upHolder.getChildAt(i); 
       if (hitTestObject(upMarker)) 
       { 
        yDir = 1; 
        xDir = 0; 
        this.gotoAndStop(3); 


       } 
      } 
      for (i=0; i<_root.downHolder.numChildren; i++) 
      { 
       //the process is very similar to the main guy's testing with other elements 
       var downMarker:DisplayObject = _root.downHolder.getChildAt(i); 
       if (hitTestObject(downMarker)) 
       { 
        yDir = -1; 
        xDir = 0; 
        this.gotoAndStop(7); 

       } 
      } 

      for (i=0; i<_root.rightHolder.numChildren; i++) 
      { 
       //the process is very similar to the main guy's testing with other elements 
       var rightMarker:DisplayObject = _root.rightHolder.getChildAt(i); 
       if (hitTestObject(rightMarker)) 
       { 
        yDir = 0; 
        xDir = 1; 
        this.gotoAndStop(6); 
       } 
      } 
      for (i=0; i<_root.leftHolder.numChildren; i++) 
      { 
       //the process is very similar to the main guy's testing with other elements 
       var leftMarker:DisplayObject = _root.leftHolder.getChildAt(i); 
       if (hitTestObject(leftMarker)) 
       { 
        yDir = 0; 
        xDir = -1; 
        this.gotoAndStop(2); 

       } 
      } 
     } 
    } 
    private function remove(event:Event):void 
    { 
     trace("remove"); 
     removeEventListener(Event.ENTER_FRAME, eFrame); 
     _root.enemiesLeft -= 1; 

    } 
} 

Когда выполняется линия gotoAndStop, кадр из изменений мувиклип и затем код подскакивает непосредственно к функции, которая запускается событием REMOVED.

У кого-нибудь есть идея, почему это событие может быть вызвано событием REMOVED?

Благодарим за помощь.

ответ

1

УДАЛЕННОЕ Событие запускается любым удалением со сцены внутри MovieClip или Sprite, который содержит его, если я не ошибаюсь. И особенно с MovieClips, у которых есть анимация, вещи удаляются и добавляются каждый раз, например, если какая-то часть анимации заканчивается на временной шкале или в ключевых кадрах.

Event.REMOVED_FROM_STAGE отправляется только тогда, когда сам контейнер удален со стадии. Может быть, это вызывает ваше замешательство? Я не вижу в вашем примере кода точно, какой тип события вы слушаете.

+0

спасибо. Изменение моего прослушивателя событий с удаленных до REMOVED_FROM_STAGE решило проблему. – wrTechTeacher

0

Что вы еще добавите в блокнот?

Без дополнительной информации я бы предположил, что вы слушаете клип внутри анимации и что его нет во всех фреймах (или, может быть, даже более вероятно), что экземпляр выгружается для другого, , от flash pro. Это может произойти в зависимости от того, в каком порядке вы добавили ключевые кадры, выравнивание луны и колебания в ионосфере. Это проще всего устранить, просто удалив все ключевые кадры, а затем повторно создав их. И затем никогда не используя вспышку pro для чего-нибудь еще.)