2012-03-04 59 views
-1

我一直在试图开发一个扩展MovieClip的CustomButton类,但是我遇到了问题。我有这个错误:MovieClip扩展

ArgumentError: Error #1063: Argument count mismatch on mkh.custombutton::CustomButton(). Expected 2, got 0. at flash.display::Sprite/constructChildren() at flash.display::Sprite() at flash.display::MovieClip()

我试图调试我的代码,但它说

"Cannot display source code at this location."

我不知道哪里出了问题,但我想这是在构造函数中:

public function CustomButton(buttonlabel:String, animationAR:Array,  active:Boolean=true, animated:Boolean = false, type:String = "free", group:int = 0) 

如果有人帮助我,我将不胜感激。谢谢。编辑2:我想我知道为什么它没有出现,所以不要介意。

+0

我需要看的不仅仅是构造更多...尝试粘贴你如何初始化类,和你在哪里调用构造函数,以及和我会看一看,看看是否有任何跳出我。 – 2012-03-04 02:53:28

+0

我正在投票结束此问题,因为您未显示准确说明问题所需的全部代码。这是一个事实,即关于构造函数参数的问题有3个答案。这是荒谬的。请发布启动此错误的代码。如果您不知道如何确定即使调试器说无法显示源代码,这也告诉我您没有花费超过10秒的时间进行调试。开始注释代码,直到应用程序编译文件。一旦确定,你就找到了违规行。请张贴他们。 – 2012-03-04 17:40:45

+0

我也会当你编辑这个问题,并把它变成一个真正的,具体的问题,而不是对危害迷你游戏中删除我的downvote。 – 2012-03-04 17:41:42

回答

1

我想我知道问题是什么,现在我希望我能够清楚地向你解释(英语不是我的第一语言)。您是否有机会在Flash程序中制作图形MovieClip并将其链接到CustomButton类?如果是这样,请注意舞台上可能存在的实例,因为当Flash创建舞台上的Sprite/Movieclips对象时,它将调用其构造函数而不带任何参数

为了避免这种情况,可以:(:这将解决你的问题,但不是很好的做法EDIT)

  • 使用

    • 在CustomButtonClass所有参数设置默认值addChild把你的Button的实例放到舞台上(我推荐这个)

    希望这有助于!

  • +0

    -1为猜测和促进非常糟糕的对象组成。具有构造函数参数的整个观点是用于构造对象,并设置一系列的默认值仅仅是荒谬的。如果不需要在构造函数中抽象出任何特殊的东西,则应该一起消除构造函数参数,并使用封装成员和访问器来自定义创建后的对象。 – 2012-03-04 17:43:56

    +0

    事情是,当我开始使用Flash时,我遇到了这个问题几次,所以我确信我正在给他正确的方法来解决问题。如果在downvoting之前实际读取我的答案,您会看到我没有“促进”任何事情,事实上我的建议是不设置默认值,而是使用ADDCHILD(对于他得到的问题,我相信他没有使用)。如果你对这个问题和我的回答都不了解,我想知道你为什么低估任何东西? – danii 2012-03-04 17:45:22

    +0

    我删除了downvote,因为我跳过了关于将对象添加到舞台和不带参数调用的构造函数的部分。这实际上是非常有意义的。然而,我仍然完全不同意可怜的对象构成,因为有一堆构造函数参数,并且在那里有默认值。 – 2012-03-04 17:47:43

    2

    看起来像你必须实例化CustomButton而不传递任何参数。

    像这样:

    var cBtn = new CustomButton(); 
    

    但是,构造函数有2个参数必须传递 - BUTTONLABEL和animationAR(其余的都OK,因为他们被分配一个默认值)。

    所以,你应该做这样的事情:

    var cBtn = new CustomButton('Test', someArray); 
    
    +1

    扩大这个答案,请注意,你*可以发送更多的参数,前两个只是所需的。 – 2012-03-04 03:33:43

    +0

    其实我用了两个参数:公共变种mcButton:=的CustomButton新的CustomButton( '你好',阿拉尔,真正的); – MKII 2012-03-04 12:45:30

    +0

    @MKII:如果是这样的话,没有足够的信息来解决这个问题。你需要发布一些更多的信息。 – 2012-03-04 15:27:40

    0
    public function CustomButton(
         buttonlabel:String, 
         animationAR:Array, 
         active:Boolean=true, 
         animated:Boolean = false, 
         type:String = "free", 
         group:int = 0 
        ); 
    

    这就是你如何定义构造函数。这意味着前两个参数(buttonlabel abd animationAR)是必需的参数。其余是可选的。

    现在,如果你尝试实例化这个像

    var cb:CustomButton=new CustomButton(); 
    

    您没有传递任何参数的constructot,这将抛出错误。
    请注意,这是在用户界面中直接创建对象时发生的情况。

    解决这一问题将是重新定义构造函数的一种方式:

    public function CustomButton(
         buttonlabel:String="CustomButton", 
         animationAR:Array=[], 
         active:Boolean=true, 
         animated:Boolean = false, 
         type:String = "free", 
         group:int = 0 
        ); 
    

    这使得所有的参数可选的,应该工作。当然,你最好把参数的默认值作为你知道的东西来工作。举例来说,在我的例子中,空数组默认为animationAR可以打破你的代码,在这种情况下,你需要把它添加到构造体:

    if(animationAR.length==0) { 
        animationAR.push(new Animation()); 
        //YOU WILL HAVE TO CHANGE THIS LINE TO CORRESPOND TO YOUR CODE 
    } 
    

    要不,你可以实例化对象为

    var cb:CustomButton=new CustomButton("My Crazy-ass CustomButton", animArray); 
    
    +0

    其实我用了两个参数:公共变种mcButton:=的CustomButton新的CustomButton( '你好',阿拉尔,真正的); – MKII 2012-03-04 12:46:09

    +1

    这就是为什么你需要学习正确调试和发布真正的侵犯行这里,@MKII。您的构造函数显然不是问题的根源,除非您已将您的类编译为运行时共享库​​并从此实例化它。我们可以通过查看IDE指出它无法显示违规行的源代码来说明这一点。如果从你的类的构造函数和类以及线起源实例它是纯文本格式,正在编制这个错误,编译器将能够显示错误的来源。 – 2012-03-04 17:45:56