所以我使用flash punk来处理游戏,我创建了一个基类,其中包含基于玩家选择的角色类型的角色统计数据。到目前为止,这是该课程的样子。
public class Stats extends Entity
{
public var ATK:Number;
public var ARM:Number;
public var SPD:Number;
public var WIS:Number;
public var CRG:Number;
public var STM:Number;
public function Stats(ATK:Number=0, ARM:Number=0, SPD:Number=0, WIS:Number=0, CRG:Number=0, STM:Number=0)
{
}
override public function update():void
{
super.update();
}
}
并且在另一个类中,当单击一个按钮时,我希望它创建一个带有参数的新stats类(2,6,2,4,4) 所以我做了
public var SkelStats:Stats = new Stats(2, 6, 2, 2, 4, 4);
然后将该对象(SkelStats)分配给玩家boss类型varriable。我这样做
public static var BossType:Stats;
然后在我添加的点击功能下的按钮类
Player.BossType = SkelStats; trace(Player.BossType.ATK)
并且跟踪总是输出0,除非我更改stats类本身的varriable(ATK)。当我在类的实例的参数中输入它时,为什么不改变?(SkelStats)
很抱歉,如果这太令人困惑,如果有任何不清楚的地方,我可以回答有关我的代码的任何问题。我只是不确定我在这里做错了什么。
答案 0 :(得分:1)
我明白了!我所要做的就是将构造函数中的变量存储在类中。显然构造函数定义的变量是临时的。所以我改变了
public var ATK:Number;
public var ARM:Number;
public var SPD:Number;
public var WIS:Number;
public var CRG:Number;
public var STM:Number;
到这个
public var attack:Number;
public var armour:Number;
public var speed:Number;
public var wisdom:Number;
public var courage:Number;
public var stamina:Number;
并添加此
attack = ATK;
armour = ARM;
speed = SPD;
wisdom = WIS;
stamina = STM;
courage = CRG;
到这个
public function Stats(ATK:Number=0, ARM:Number=0, SPD:Number=0, WIS:Number=0, CRG:Number=0, STM:Number=0)
{
}
最终类看起来像这样,并且完全符合我的要求:
public class Stats extends Entity
{
public var attack:Number;
public var armour:Number;
public var speed:Number;
public var wisdom:Number;
public var courage:Number;
public var stamina:Number;
public function Stats(ATK:Number=0, ARM:Number=0, SPD:Number=0, WIS:Number=0, CRG:Number=0, STM:Number=0)
{
attack = ATK;
armour = ARM;
speed = SPD;
wisdom = WIS;
stamina = STM;
}
}
在此处找到所有这些答案:AS3 passing constructor parameters as variables in class