Flash新手,请教AS3中在一个类中读取和改变另一个类中某变量的问题。

2024-11-03 05:37:22
推荐回答(4个)
回答1:

Main是不是文档类(主类)?是的话你就不能这样写new Main(),它应该作为单例而存在。
教你一招绝的,先给Main创建静态的自身对象,并在 Main的构造函数里让它指向 "this",然后就可以通过这个自身对象直接操作本Main实例的任何公开(public)的属性了。

package
{
import flash.display.Sprite;
public var _a:uint=1;
//

public static var instance:Main;//第1步:创建静态的自身对象
//

public class Main extends Sprite
{
pubilc function Main():void
{
instance = this; //第2步:在构造函数里让它指向this(也就是本Main类的实例)
}
}
}

然后你就可以在任何类文件的任何地方这样写:
Main.instance._a = 2;

比如
package
{
import flash.display.Sprite;
public class LeiA extends Sprite
{
pubilc function LeiA():void
{
trace( Main.instance._a);//现在是1
Main.instance._a = 2;
trace( Main.instance._a); //现在是2
}
}
}

回答2:

通过Main类的实例来访问它里面的变量_a

如:
var m:Main = new Main();
trace(m._a);
m._a = 2;
trace(m._a);

回答3:

最好用 get()方法 set() 读取与更改值

回答4:

声明的时候将Main当一个参数传到LeiA里,
而LeiA类的构造函数需要增加Main类的参数,如

package
{
import flash.display.Sprite;
public class LeiA extends Sprite
{
protected var main:Main;
pubilc function LeiA(main:Main):void
{

this.main = main;//将main记录,在其它函数都可以访问main以得到主类的可访属性与方法
this.main._a=2;//修改了main的参数_a
}
}
}

此时,在

Main中

pubilc function Main():void
{
new LeiA(this);//声明类LeiA时传Main进去
}

还有一种方法处理,就是使用静态变量来代替变量_a,那么在任何一个类中,将静态变量_a更改即可更改了变量_a