Actionscript 3 如何从Actionscript 3.0中的另一个类实例引用一个类实例?
快速提问。我整个上午都在谷歌上搜索,但它要么不在那里,要么以一种无法注册的方式书写。我倾向于相信后者,因为这似乎对我来说应该是一件微不足道的事情 我使用AS 3.0制作了一个小的Flash文件,这是我第一次真正能够坚持采用面向对象的方式来做事情,而不是从时间线中拼凑出一堆东西来避免在课堂上一切都不正常 所以我想保持这种方式,但有一件事我一直在逃避:我不能调用另一个类的实例(而不是我从中调用的实例)的方法,而不诉诸“DocumentClass(root).instanceName.method” 直觉告诉我必须有更好的方法来实现这一点(比如,不必每次调用另一个类实例的函数时都引用document类;当然也不必使用“root”一词——这在我看来太简单了 有谁有更好的方法可以分享吗 提前谢谢!SS 编辑:以下是一些相关代码: 主要类别:Actionscript 3 如何从Actionscript 3.0中的另一个类实例引用一个类实例?,actionscript-3,Actionscript 3,快速提问。我整个上午都在谷歌上搜索,但它要么不在那里,要么以一种无法注册的方式书写。我倾向于相信后者,因为这似乎对我来说应该是一件微不足道的事情 我使用AS 3.0制作了一个小的Flash文件,这是我第一次真正能够坚持采用面向对象的方式来做事情,而不是从时间线中拼凑出一堆东西来避免在课堂上一切都不正常 所以我想保持这种方式,但有一件事我一直在逃避:我不能调用另一个类的实例(而不是我从中调用的实例)的方法,而不诉诸“DocumentClass(root).instanceName.method”
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
}
}
}
打包myApp{
导入flash.display.*;
导入flash.events.*;
公共类控件扩展了flash.display.MovieClip{
私人var第01节;
私营部门第02条;
私家车第03条;
公共职能控制(){
//这里有一些构造函数代码
}
公共函数doSomethingCaller(){
MyApp(root).background.doSomething();您可以尝试以下方法:
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
在文档类“Main”中,导入类“A”和“B”。私有属性“_A”和“_B”在“A”和“B”类的“Main”类中声明。接下来是一个名为“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”类的引用访问“a”的实例从“B”类开始
有很多方法,这只是其中一种简单的方法,尽管我认为有更好的方法。你应该展示你的flash应用程序/电影的源代码,这样我和其他人就可以更好地了解哪种方法适合你
我希望这有帮助:)很抱歉,这件事让我不知所措。比如,我不明白你为什么要在主类中导入额外的类,这让我觉得我可能做错了什么。让我在上面发布一些代码,也许你会明白我在说什么。想象一下,“A”和“B”类是你的“背景”和“控制”类。它们都在一个名为“com”的文件夹中(在您的例子中称为“MyApp”),我将其导入到“Main”类中。我的示例中的“Main”类与名为“Main.fla”的flash文档位于同一文件夹中。如果您不了解什么是getter和setter方法,或者什么是访问修饰符(例如public、private等)如果你愿意的话,我可以编辑我的答案来解释这些解释。哇,我刚刚得到了答案,但是J.H.Rollerskating Christ为了能够调用另一个实例的方法,需要跳过很多困难。我想我最好还是接受它作为Actionscript的一个限制,并坚持使用DocumentClass(root)。无论如何,谢谢!老实说,有更好的方法,我只是用了一些简单易懂的方法。在你的情况下,不用解析Main到B的引用,你可以简单地解析a到B的引用。如果你愿意,你可以将你的flash应用程序/电影发送给我,我可以随时查看。联系详细信息在我的个人资料上。希望我可以lped有点:)