代码之家  ›  专栏  ›  技术社区  ›  BoltClock

“警告:1090:迁移问题”,尽管显式注册了事件处理程序

  •  1
  • BoltClock  · 技术社区  · 8 年前

    我有一个游戏引擎类继承自 MovieClip onMouseDown .看起来是这样的:

    private function onMouseDown(e:MouseEvent):void
    {
        if (_isEnginePlaying)
        {
            _player.attack();
        }
    }
    

    我在engine类的 init

    private function init(e:Event):void
    {
        removeEventListener(Event.ADDED_TO_STAGE, init);
        // ...
        stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
        // ...
    }
    

    这可以正确编译并工作,但编译器会发出警告:

    警告:1090:迁移问题:在ActionScript 3.0中,Flash Player在运行时不会自动触发onMouseDown事件处理程序。您必须首先使用addEventListener(“mouseDown”,callback\u处理程序)为事件注册此处理程序。

    但是,如图所示,我 addEventListener() 。为什么编译器仍然发出此警告,我可以做些什么来消除此警告?

    1 回复  |  直到 8 年前
        1
  •  4
  •   BoltClock    8 年前

    这是因为处理程序是用不同的实例注册的,而不是游戏引擎实例( this ). 请记住,AS2中的事件处理程序只是通过将它们指定为实例上的属性来注册的,这些实例应处理各自的事件,并在需要时自动触发。警告是为了通知开发者他们不会在AS3中自动启动。

    有多种方法可以消除警告:

    1. 只需重命名 onMouseDown 1 2 3 ),所以 变成 mouseDownHandler :

      private function init(e:Event):void
      {
          removeEventListener(Event.ADDED_TO_STAGE, init);
          // ...
          stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
          // ...
      }
      
      private function mouseDownHandler(e:MouseEvent):void
      {
          if (_isEnginePlaying)
          {
              _player.attack();
          }
      }
      
    2. 可以侦听事件,将事件注册到

      private function init(e:Event):void
      {
          removeEventListener(Event.ADDED_TO_STAGE, init);
          // ...
          addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
          // ...
      }
      

      如果 打算 是为

    3. ,但使用不同的实例:

      private function stage_onMouseDown(e:MouseEvent):void
      {
          if (_isEnginePlaying)
          {
              _player.attack();
          }
      }
      
    4. 如果你坚持保持现状,你可以 suppress the warning altogether

    推荐文章