Могу ли я создать EventListener в AS3 из одного объекта и удалить его из другого объекта?

Я потратил много времени, пытаясь решить эту проблему. Итак, в основном у меня есть класс (addadd), который содержит функцию, которая может создать eventListener и удалить eventListener. И у меня есть еще два объекта (Symbol1, Symbol2), которые сообщают функции, что делать - создавать или удалять.


    package {

import flash.display.*;
import flash.events.Event;
import fl.motion.MotionEvent;
import flash.events.MouseEvent;

public class addadd
{

    var stanishev:stanishev_line = new stanishev_line;

    public function addadd()
    {
        // constructor code
    }

    public function stanishevF(par1)
    {
        if (par1 == "create")
        {
        Main.display.addChild(stanishev);
        stanishev.name = "stanishev_child";
        stanishev.x = -200;
        stanishev.y = 500;
        stanishev.gotoAndPlay("start");
        stanishev.addEventListener(Event.ENTER_FRAME, frameDOstanishev);
        }
        else 
        {
            trace ("asasasas");
        stanishev.removeEventListener(Event.ENTER_FRAME, frameDOstanishev);
        }
    }

    public function frameDOstanishev(e:Event)
    {
        trace (stanishev.currentFrame);
    }
} }    

package {

import flash.display.SimpleButton;
import flash.events.MouseEvent;


public class Symbol1 extends SimpleButton
{

    var call_creator:addadd = new addadd;


    public function Symbol1()
    {
        // constructor code
        addEventListener(MouseEvent.MOUSE_OVER, eventResponse);
        addEventListener(MouseEvent.MOUSE_DOWN, eventResponse2);

    }

    function eventResponse(e:MouseEvent)
    {
        call_creator.stanishevF("create");
    }

    function eventResponse2(e:MouseEvent)
    {
        call_creator.stanishevF("destroy");
    }
} }    

package {


import flash.display.SimpleButton;
import flash.events.MouseEvent;


public class Symbol2 extends SimpleButton
{
    var call_creator:addadd = new addadd;

    public function Symbol2()
    {
        // constructor code
        addEventListener(MouseEvent.MOUSE_DOWN, eventResponse2);
    }

    function eventResponse2(e:MouseEvent)
    {
        call_creator.stanishevF("destroy");
    }
} }     

Поэтому я могу создать класс addadd для создания и удаления этого EventListener из Symbol1, но я не могу создать класс addadd для создания этого EventListener, посылая параметр "create" из Symbol1 и удаляя его из Symbol2, отправляя параметр "destroy"!!!

Как я могу создать и удалить один и тот же eventListener из разных объектов? Я обнаружил, что такой подход создает и убивает слушателей более организованно, но я не уверен, что это правильный путь. У меня проблемы со слушателями (ошибка: 1009), когда я перемещаюсь между кадрами на главной временной шкале, поэтому я хочу уничтожить их все, прежде чем перейти к другому кадру.

Спасибо

1 ответ

Вы можете положить public function сказать, removeListeners() а также addListeners() в этом классе и вызвать эти функции из другого класса, например,

 class A ()
 {

      //constructor code


      public function removeListeners():void
      {

            //remove listeners here
      }
  }

Тогда позвони removeListeners()public function из класса (например, Main.as) где вы создали экземпляр этого класса "A".

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