Actionscript 3 从一个类中访问带有ENTER_FRAME事件的函数,并将更新发送到AS3中的另一个类

Actionscript 3 从一个类中访问带有ENTER_FRAME事件的函数,并将更新发送到AS3中的另一个类,actionscript-3,air,enterframeevent,Actionscript 3,Air,Enterframeevent,我想开始一个项目。但是,在做文书工作时,我意识到一种情况如下: 比如说,我们有三节课 梅因·阿斯 答: B.A 这里,“Main.as”是创建a和B实例的中心类 类有一些函数,比如“updatePosition(e:Event)”和ENTER_FRAME事件 类B需要通过“Main.as”从类A获取此“updatePosition(e:Event)”的更新 如何仅使用一个ENTER\u FRAME事件和仅在A.as类中的ENTER\u FRAME事件实现这一点?为什么不在main.as中放置一个

我想开始一个项目。但是,在做文书工作时,我意识到一种情况如下:

比如说,我们有三节课

  • 梅因·阿斯
  • 答:
  • B.A
  • 这里,“Main.as”是创建a和B实例的中心类

    类有一些函数,比如“updatePosition(e:Event)”和ENTER_FRAME事件

    类B需要通过“Main.as”从类A获取此“updatePosition(e:Event)”的更新


    如何仅使用一个ENTER\u FRAME事件和仅在A.as类中的ENTER\u FRAME事件实现这一点?

    为什么不在main.as中放置一个ENTER\u FRAME处理程序,然后从那里调用其他类的更新

    public class Main extends Sprite
    {
        private var _a:A = new A();
        private var _b:B = new B();
        public function Main()
        {
           if(stage) init();
           else addEventListener(Event.ADDED_TO_STAGE,init);
    
        }
    
        private function init(e:Event=null):void
        {
            removeEventListener(Event.ADDED_TO_STAGE,init);
            stage.addEventListener(Event.ENTER_FRAME,onEnterFrame);
        }
    
        private function onEnterFrame(e:Event):void
        {
              _a.updatePosition();
              _b.updatePosition();
        }
    
    }
    

    这里有一个简单的方法,但我相信还有很多更好的方法(例如使用自定义事件或AS3信号库):

    梅因

    private function eFrame(e:Event) 
    {
        a.runEvents();
        b.runEvents();
    }
    
    A.as。B.A

    public function runEvents()
    {
       // Run whatever events you need to run
    }
    

    这将使您获得与3个ENTER_FRAME事件相同的效果,但没有开销,但是大量函数调用会带来开销。

    您必须在构造函数中检查stage,因为它可以为空。@Baris-在类A中必须有ENTER_FRAME事件。这是我将要构建的框架的需要。@Pixel-是,我认为定制活动可以完成这项工作,谢谢你的建议。