如何从Actionscript 3.0中的另一个类实例引用一个类实例?
快速问题。我整个早上一直在Google上搜索,但它要么不在那里,要么以未注册的方式书写。我倾向于相信后者,因为这看起来应该对我来说完全无关紧要。如何从Actionscript 3.0中的另一个类实例引用一个类实例?
我使用AS 3.0制作了一个小型Flash文件,这是我第一次真正能够坚持OOP的做事方式,而不是将时间线上的东西混合在一起,让所有的东西都在课堂上工作。
所以我想保持这种方式,但有一件事是让我难以理解的:我无法调用另一个类的实例的方法(而不是我调用的方法),而无需诉诸“DocumentClass (根).instanceName.method“。直觉告诉我必须有一个更好的方法来做到这一点(比如,每次我调用另一个类实例的函数时不必引用文档类;并且一定不用“root”这个词 - 只是似乎因此Flash 5我
没有任何人有这样做的更好的方式,他们可以共享
在此先感谢SS
编辑:?!下面是一些相关的代码: 主类:
package myApp {
import flash.display.*;
import flash.events.*;
public class Main extends flash.display.MovieClip {
public var background;
public var control;
public function Main() {
//load the background
this.background = new Background();
this.addChild(background);
//load the control
this.control = new Control;
this.addChild(control);
}
}
}
背景类:
package myApp {
import flash.display.*;
import flash.events.*;
public class Background extends flash.display.MovieClip {
public function Background() {
this.x = 0;
this.y = 0;
}
public function doSomething() {
//do something here
}
}
}
控制类:
package myApp {
import flash.display.*;
import flash.events.*;
public class Control extends flash.display.MovieClip {
private var section01;
private var section02;
private var section03;
public function Control() {
//some constructor code here
}
public function doSomethingCaller() {
MyApp(root).background.doSomething(); <--- HERE
}
}
}
你可以试试下面的办法:
package
{
import com.A;
import com.B;
import flash.display.MovieClip;
public class Main extends MovieClip
{
private var _a:A;
private var _b:B;
public function get a():A
{
return _a;
}// end function
public function Main():void
{
init();
}// end function
private function init():void
{
_a = new A();
_b = new B(this);
}// end function
}// end class
}// end package
在你的文档类 “主”,等级“A “和”B“是进口的。 “A”和“B”类的“Main”类中声明了私有属性“_a”和“_b”。接下来有一个名为“a”的getter方法返回“_a”。接下来是一个名为“init()”的私有方法,可以从“Main”类的构造函数调用。在“init()”方法中,“_a”和“_b”属性被实例化,但是对于“_b”,使用“this”关键字来解析对“Main”的引用。
package com
{
import flash.display.MovieClip;
public class A extends MovieClip
{
public function A():void {}// end function
public function traceClassName():void
{
trace("Class name: A");
}// end function
}// end class
}// end package
在类“A”中有一个名为“traceClassName()”的公共方法,它在调用时跟踪字符串“Class name:A”。
package com
{
public class B
{
private var _main;
public function B(p_main):void
{
_main = p_main;
_main.a.traceClassName();
}// end function
}// end class
}// end package
在类“B”中,您有一个名为“_main”的私有属性。在“B”类的构造函数中,当“B”类被实例化时,有一个参数用于Main类的引用。然后将“_main”属性分配给“Main”类的引用。现在,您可以通过“B”类中的“Main”类的引用来访问“A”的实例。
有很多方法,这只是其中一种更简单的方法,虽然我认为有更好的方法。您应该提供您的Flash应用程序/电影的源代码,以便我和其他人可以更好地了解哪个适合您。
我希望这有助于:)
对不起,但这只是在我的头上。就像,我不明白你为什么要将额外的类导入到你的Main类中,并且这让我想我可能做错了什么。让我在上面发布一些代码,也许你会看到我在说什么。 – StormShadow 2010-12-10 08:42:29