AS3类/基类构造函数

时间:2011-03-20 20:38:17

标签: flash actionscript-3 actionscript constructor flash-cs5

我的previous问题的后续行动。

我的舞台上有一个按钮,它有一个名为Game1的类(我没有定义这个类,只是像Juan回答我的另一个问题那样链接它)。该按钮有'GameButton'作为基类,目前包含一些简单的x,y语句。

我的所有按钮都有一个虚拟类'GameX'和一个基类GameButton;这种方式它们从基类继承,但它们仍然可以有不同的图形。

我有一个主类,其中包含添加此按钮的代码:

public class MainAteam extends MovieClip
{
    public var btn1:Game1;

    public function MainAteam()
    {
        btn1 = new Game1();
        addChild(btn1);
        btn1.addEventListener(MouseEvent.CLICK, startGame1);
    }
    // startGame 1 function here
}

现在,我希望能够通过参数给出x,y值,这样我就可以将每个按钮放在不同的位置。但是,当我尝试新游戏(5,5)时,我将以下内容放在GameObject构造函数中:

package 
{
 import flash.display.SimpleButton;

 public class GameButton extends SimpleButton
 {
    public function GameButton(startX:Number, startY:Number)
    {
        x = startX;
        y = startY;
    }
  }
}

我收到以下错误:

1203: No default constructor found in base class GameButton

我真的不知道如何解决这个问题,因为我让Flash为我定义GameX类(我想它们只是空的)并使用基类来设置一些属性。如果我只是放x=5; y=5,它就可以了。非常感谢。

1 个答案:

答案 0 :(得分:3)

这是两件事之一,要么你需要调用super();在构造函数中,或者在初始化时没有实现必需的类属性/方法。尝试扩展Button,而不是SimpleButton,看看它是否适合你。

<强> 修改 我的第一个答案是在正确的轨道上,但仍然是错误的。问题是你正在创建你的Game1,Game2等类而不是调用GameButton类的构造函数。当您扩展具有REQUIRED构造函数参数的类时,必须使用super();所以在这种情况下,你需要在Game1类构造函数中调用:

super(positionX, positionY);

OR

您可以将GameButton构造函数修改为默认值,如下所示:

public function GameButton(var x:int = 0, var y:int = 0)

如果您不知道,super()只是一种访问基类构造函数的方法,也可以称为超类,这就是为什么该方法被称为super :)。希望这会有所帮助。

同时

另请注意,如果您在Flash IDE(在库中)中创建这些Game1,Game2类等,那么您将需要将自动添加默认值的路径添加到GameButton构造函数中为库对象生成类。或者,你仍然可以在预编译的库剪辑中创建图形,而不是在Export For Actionscript设置中定义类+基类,像在GameButton中一样手动创建一个实际的Game1 / Game2等类,然后在Export For中Actionscript区域放置了完整的限定类名。像这样:

enter image description here