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();
这是我的 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();