我的 previous 的后续行动问题。
我的舞台上有一个按钮,其中有一个名为 Game1 的类(我没有定义该类,只是将其链接起来,就像胡安回答我的其他问题一样)。该按钮以“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 值,以便我可以将每个按钮放置在不同的位置。但是,当我尝试 new Game(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
,效果很好。非常感谢。
最佳答案
这是两件事之一,要么你需要调用 super();从你的构造函数中,或者你没有在初始化时实现所需的类属性/方法。尝试扩展 Button,而不是 SimpleButton,看看这是否更适合您。
编辑 我的第一个答案是正确的,但仍然是错误的。问题是您正在创建 Game1、Game2 等类,而不是调用 GameButton 类的构造函数。当你扩展一个具有必需的构造函数参数的类时,你必须使用 super(); 提供它们。因此,在这种情况下,您需要在 Game1 类构造函数中调用:
super(positionX, positionY);
或者
您可以修改 GameButton 构造函数以具有默认值,如下所示:
public function GameButton(var x:int = 0, var y:int = 0)
如果你不知道,super() 只是访问基类构造函数的一种方法,基类也可以称为父类(super class),这就是该方法称为 super 的原因:)。希望这会有所帮助。
还有
另请注意,如果您从 Flash IDE(在库中)创建这些 Game1、Game2 类等,那么您将需要像 Flash 自动一样向 GameButton 构造函数添加默认值为库对象生成类。或者,您仍然可以在预编译的库剪辑中创建图形,而不是在导出为 Actionscript 设置中定义类 + 基类,而是像为 GameButton 所做的那样手动创建实际的 Game1/Game2 等类,然后在导出为Actionscript 区域放置完整的限定类名。就像这样:
关于flash - AS3 类/基类构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5371347/