Flash AS3-从类调用根时间线中的函数

Flash AS3-从类调用根时间线中的函数,flash,actionscript-3,Flash,Actionscript 3,我想从外部类调用Flash根时间线内的函数 此代码来自类: private function loadImage(event:Event):void { addToContainer() } 在主时间表中: function addToContainer():void { trace("Called") } 如何管理它?尝试使用 MovieClip(根) 访问主时间线。是否需要将addToContainer()放入时间线 我会考虑把你的代码完全从时间线中移除,而用一个

我想从外部类调用Flash根时间线内的函数

此代码来自类:

private function loadImage(event:Event):void
{
    addToContainer()   
}
在主时间表中:

function addToContainer():void
{
    trace("Called")
} 
如何管理它?

尝试使用

MovieClip(根)


访问主时间线。

是否需要将addToContainer()放入时间线

<>我会考虑把你的代码完全从时间线中移除,而用一个AdtoCube来创建一个“文档类”。这样可以更容易地跟踪您所看到的内容

public class FunctionTest extends MovieClip {
   protected static var _this:FunctionTest;
   function FunctionTest() { _this = this; }
   public static function get application_root():FunctionTest { return _this; }
   public function addToContainer():void { trace("Called"); }
}
现在您有两种编写loadImage的方法。如果它在一个DisplayObject中(正如Marty Wallace之前的评论),您可以这样说

(this.root as FunctionTest).addToContainer();
如果没有,您可以在任何地方使用:

FunctionTest.application_root.addToContainer();
如果确实必须在时间轴中定义addToContainer(),则需要使用指向显示根的链接初始化外部类。做一些类似于:

public class LoadImageClass {
   protected var _stored_root:MovieClip;
   function LoadImageClass(new_root:MovieClip) { this._stored_root = new_root; }
   public function loadImage():void {
      this._stored_root.addToContainer();
   }
}

您可以将事件侦听器添加到主时间线中的对象。在对象上触发此事件时,将调用主时间轴中的函数

//Main Timeline
var obj:YourExternalClass = new YourExternalClass();

obj.addEventListener(MouseEvent.CLICK, addToContainer);

最好也是最简单的方法是将主时间线作为参数推送到类中:

public static var _this:Object;
在类中设置一个变量:

public static var _this:Object;
现在,在主时间轴中设置此变量:

MyClass._this=this;
_this.addToContainer()
现在,在您的课堂上,您可以使用
\u此
变量访问主时间轴:

MyClass._this=this;
_this.addToContainer()

I H☺这有帮助

@Tom你需要确保你的类是一个
DisplayObject
,并且被添加到后台才能工作。如果这两个都不可能(您的外部类没有使用DisplayObject作为基础),那么您需要将引用传递到主时间线或其他位置的DisplayObject。如何使类成为DisplayObject?是的,我需要将addToContainer()放在时间线中,抱歉,那么您需要将外部类a链接传递到显示根目录。我已经更新了我的答案,给出了一个可能的例子。