Flash AS3 - 尝试从另一个类访问公共函数会引发错误?

时间:2016-01-02 20:30:30

标签: actionscript-3 flash

这是我的Main.as:

O(n^2)

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

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

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

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

1 个答案:

答案 0 :(得分:1)

下次发布错误消息本身时,我们大多数人都没有id记忆的Flash错误。 ;)

来自the docs

  

2136 SWF文件%1包含无效数据。

这给我敲响了钟声。您的Main课程可能是您的文档课程。文档类是无法实例化的特殊类

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

有很多方法可以获得引用,因为它实际上只是一个代码依赖设计问题。两种常见的简单解决方案是:

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

2. 使用单例模式并为文档类实例分配静态公共引用:

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

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