Flash AS3 - 尝试从另一个 class 访问 public 函数会引发错误?

Flash AS3 - Trying to access public function from another class throws error?

这是我的 Main.as:

package {
    import flash.display.MovieClip;
    public class Main extends MovieClip {
        public function Main() {
           // Code here
        }

        public function myFunc() {
            trace('!!!!');
        }
    }
}

当我尝试使用以下代码从另一个 class 访问它时,Flash 向我抛出错误 #2136:

package {
    import flash.display.MovieClip;
    import Main;

    public class MyClass extends MovieClip {
        public var m:Main;

        public function MyClass() {
            m = new Main();
            m.myFunc();
        }
    }
}

编辑:还有一件事。第二个 class 附加到 MovieClip 并在第一帧导出。我认为这没有什么区别,但评论中有人告诉我它确实如此,显然这首先是导致错误的原因。在这种情况下,如何从附加到 MC 的 class 访问 public 函数?

下一次post错误消息本身,我们大多数人都没有通过 id 记住的 Flash 错误。 ;)

来自the docs

2136 The SWF file %1 contains invalid data.

这给我敲响了警钟。您的 Main class 可能是您的文档 class。文档class是一个特殊的class,无法实例化


要从其他代码访问文档 class 实例的属性和方法,您只需要引用文档 class 实例。

您可以通过多种方式获得参考,因为它实际上只是一个代码依赖性设计问题。两种常见且简单的解决方案是:

1. 使用作为文档 class 实例的子项添加的任何显示对象的 root 属性。由于 root 属性 被键入为 DisplayObject,您需要转换为您的文档 class 以访问其方法和 属性,例如:Main(root).myFunc().

2. 使用单例模式并为文档class实例分配静态public引用:

public class Main {
    public static var main:Main;
    public function Main() {
        main = this;
    }
    public function myFunc():void { }
}

// usage:
Main.main.myFunc();