2012-05-03 139 views
0

目前我有一个类需要来自另一个类的信息,但是必须在运行时根据其他变量确定哪个类。AS3 - 通过变量访问类信息

实际上,我需要我的班级BUTTON.as才能访问GUN(1-9).as,而不必知道它会是什么数字。

我假定将工作的代码是这样的:

public function enableButton(shortcut:int):void{ 
     trace(ID) 
     dtf_ammo.text = gun[ID].ammo 
     refreshThis(shortcut, true) 
     this.alpha = 1 
     isActive = true 
    } 

ID是类的数量(在这种情况下,gun1)。

下不工作:

public function enableButton(shortcut:int):void{ 
     trace(ID) 
     dtf_ammo.text = gun1.ammo 
     refreshThis(shortcut, true) 
     this.alpha = 1 
     isActive = true 
    } 

然而,因为有9枪,仅1的按钮,我需要能够使用该ID变量中访问功能类。

这是可能的,如果不是有办法做我想在这里做什么?

+0

你试图访问类静态变量?实例变量? –

+0

我正试图访问静态。公共静态变量ammo:int = 999 –

回答

1

为了访问名称仅在运行时已知的类的静态属性,可以使用以下代码。

getDefinitionByName("gun" + i).ammo 

getDefinitionByName返回表示传递的字符串命名的类的Class对象。这个类对象包含所有类的静态属性的引用。

+0

由于某些原因,尽管“gun1.as”处于打开状态并且知道它正常工作,但由于某种原因,这给了我一个错误:ReferenceError:错误#1065:变量gun1未定义。 \t at global/flash.utils :: getDefinitionByName() \t at src.actionbar :: button/enableButton() –

+0

如果有帮助,gun1-9类不在调用它的同一个文件夹中,它们是在src.wepaons.gun1-9中。我不是很明白为什么它说gun1没有被定义。 –

+0

@Kevin确保A:你导入所有枪#类或者B:你完全用包名解析类名(weapon.gun#) –

0

你说第二块代码正在工作。所以,如果你创建和阵列说

var gun:Array = new Array(gun1, gun2,gun3,gun4,gun5,gun6,gun7,gun8,gun9) 
//gun1 to gun9 , being the instances of the Gun class 
public function enableButton(shortcut:int):void{ 
     trace(ID) 
     dtf_ammo.text = gun[ID].ammo 
     refreshThis(shortcut, true) 
     this.alpha = 1 
     isActive = true 
    } 

所以,功能enableButton会正常工作。

+0

这工作,但它是我的理解,你不能通过数组访问静态函数。我想我误解了。 –

+0

这不是数组。它是一个实例,作为一个数组值。 是的,你不能通过实例访问静态函数。你需要直接使用类名。因此,如果类名是Gun,那么使用Gun.ammo(否则会给出编译器错误) 或者,如您所说,有9个枪,那么你也可以使用一个函数Gun.getGunInstance()。 –

+0

对,我明白了。这很有用,谢谢。 –