我创建了两个类,它们定义了对象的一般结构,以及许多父类变体的子类。变量在超类中有类型声明,在子类中有声明值。但是:AS3超类变量和子类错误
[Body_Part_Armor.as]
package {
import flash.display.*;
public class Body_Part_Armor extends MovieClip
{
var agility_malus;
var hp_total;
var defense;
var armor_extra_height;
var armor_extra_width;
var hp_left;
public function Body_Part_Armor()
{
hp_left = hp_total;
}
}
}
[Chest_Armor_1.as]
package
{
public class Chest_Armor_1 extends Body_Part_Armor
{
agility_malus = 2;
hp_total = 20;
defense = 7;
armor_extra_height = 10;
armor_extra_width = 6;
public function Chest_Armor_1()
{
}
}
}
对于编译器的调试测试Body_Part_Armor和Chest_Armor_1完全细,而
[ Weapon.as]
package
{
import flash.display.*;
public class Weapon extends MovieClip {
var weapon_type:Number;
var n_attacks:Number;
var damage:Number;
var precision:Number;
// some other variables in here
var is_empty_weapon:Boolean;
public function Weapon()
{
}
}
}
[Empty_Arm_Weapon.as]
package
{
public class Empty_Arm_Weapon extends Weapon
{
is_empty_weapon = true;
public function Empty_Arm_Weapon() {
}
}
}
给我以下错误: 1120:未定义的属性访问is_empty_weapon (但如果我写VAR is_empty_weapon = TRUE;在Empty_Arm_Weapon中,它会抱怨与名称空间public中的变量的继承定义发生冲突)。
但是,如果我在构造函数Empty_Arm_Weapon()中定义了变量值is_empty_weapon = true,那么我将不会收到任何错误。
我想我错过了一些非常明显的事情,但我无法分辨两种情况之间的区别,但一种可行,另一种则不行。 你能帮我吗? 谢谢!
正如我已经在OP说,我可以用它在构造函数中定义的价值的工作。问题是为什么然后它在Body_Part_Armor - Chest_Armor_1中使用子类类定义中的值声明(不在构造函数内)正常工作? – Alucardy80 2012-08-08 00:43:03
这样做没有任何意义。任何不在构造函数或方法中的东西都应该是该类的新变量声明。在这里做任务对我来说并不意味着什么,你什么时候期望这个任务发生?对象创建之前?那么它将没有内存来存储这些属性。只有在构造函数或更高版本中对我有意义。我不知道为什么这不会为你造成问题。 – shaunhusain 2012-08-08 00:45:07
我是否正确地将你的代码分割成单独的文件? – shaunhusain 2012-08-08 00:49:03