1136:参数数量不正确。预计0

时间:2010-01-18 22:42:26

标签: flash actionscript-3 actionscript

我一次又一次地问这个问题,并且得到了答案。它驱使我疯狂的evertytime我得到它。有时它有效,有时它不起作用。当我通过构造函数传递一个对象时,它给出了错误消息。所以我总是要制定第二种方法让它发挥作用。这是我的代码,如果有人可以请帮助我

var ds = new desertStorm(ship);

以上是我打电话的对象,下面是班级。

package com.objects{

    import flash.display.MovieClip

    public class desertStorm extends Stinger {

        private var turret1:Torret;
        private var swap:Boolean = false;
        private var target:Avatar;
        public function desertStorm(target:Object):void
        {
            this.target = target;
            health = 2;
            turret1 = new Torret();
            eApi.addGameChild(turret1);
        }

        override public function updateObject():void
        {
            if(!swap)
            {
                eApi.swapGameChildren(this, turret1);
                swap = true;
            }
            y += cspeed;
            turret1.x = x;
            turret1.y = (y + 40);
        }
    }
}

如果有人能帮助我,那就太棒了

7 个答案:

答案 0 :(得分:1)

我遇到了同样的错误。在我的场景中,我在一个名为按钮的子文件夹中有一个类。我相应地修改了包语句(包括文件夹路径),并在实例化按钮文件夹中的类的类中正确使用了import语句。按钮文件夹中的类已附加到fla的库中的movieclip。

那是我的问题。对于库(fla)中的movieclip,我不得不修改符号属性>用于包含文件夹路径的类名称框。

我的类名为MakeButton.as,位于名为buttons的文件夹中。我因此修改了库中的符号,如下所示:buttons.MakeButton,其中buttons是MakeButton.as所在的子文件夹.flag,文档类和其他类位于buttons文件夹上方的文件夹中。

答案 1 :(得分:0)

您看到的错误似乎就在这一行:

eApi.addGameChild(turret1);

我会查看eApi对象,看看addGameChild是否接受任何参数。

答案 2 :(得分:0)

尝试将以下行添加到构造函数中:

super();

这将显式调用基类的构造函数并将其传递给零参数。可能是如果基类的构造函数没有以这种方式显式调用,则使用与子类的构造函数相同的参数调用它。

但这只是一种预感;我不记得ActionScript 3中构造函数的规则。

编辑:看来加布里埃尔麦克亚当斯在我面前想出了这个,但我没有及时看到他的评论。

答案 3 :(得分:0)

更新答案:#

This listing of compiler errors说:

  

如果基类的构造函数有一个或多个必需参数,则必须使用super()语句显式调用它。

鉴于您的错误(1203: No default constructor found in base class com.objects:desertStorm.),看起来您正在某处扩展desertStorm并需要使用适当的参数调用super()函数。

下面给出的这个简单示例将因此编译错误而失败: 1203: No default constructor found in base class Class1.

表明问题出在Class1扩展的类中。

所以,无论你是在扩展desertStorm还是调用正确的超级构造函数,都要找到它。

实施例

package
{
    import flash.display.MovieClip;

    public class Class1 extends MovieClip
    {
        public function Class1(property:String)
        {
            super();
        }
    }
}

package
{
    import flash.display.MovieClip;

    public class Class2 extends Class1
    {
        public function Class2()
        {
            // You need to call the super constructor here.
            // super("Work!");
        }
    }
}

原始答案:

  

如果我从参数中删除了ship并保持公共功能   desertStorm(目标:对象):无效。这是我得到的错误....   '1203:在基类com.objects中找不到默认构造函数:desertStorm。'
  我不知道这意味着什么,但听起来我做的时候没有构造函数

虽然您有构造函数,但您没有默认构造函数。

如果您通过将它们从库拖到舞台上创建了desertStorm的任何实例,则必须定义默认构造函数,例如:

public function desertStorm():void
{
    super();

    // Do simple initialisation behaviour here.
}

这是因为如果它有一个自定义构造函数,Flash不知道如何实例化你的类 - 它怎么能?

相反,将其他行为移动到初始化函数中,该函数了解您的target对象的所有内容:

public function init(target:Object)
{
    this.target = target;
    health = 2;
    turret1 = new Torret();
    eApi.addGameChild(turret1);
}

然后你可以像这样实例化它:

var ds = new desertStorm();
ds.init(ship);

// Do whatever else you need to do with your desertStorm object, e.g.:
addChild(ds);

答案 4 :(得分:0)

我发现如果您不小心将类文件和fla文件放在不同的文件夹中,将显示1136错误。确保fla文件找到了类文件。

答案 5 :(得分:0)

以下是一些现有回复的简单版本:

确保符号属性中的链接名称/类路径包含类的完整包路径。

例如,如果您的包是com.company.project,并且您的类是MyClass,则“符号属性”中“类”框中的字符串必须为:

com.company.project.MyClass

如果你在该框中只有MyClass,Flash会为你创建一个类定义,而不是你编码的那个,这就是为什么没有构造函数参数并给你“预期0”错误。

答案 6 :(得分:-1)

事实证明,问题在于附加到库中动画片段的自定义类。由于某种原因,你不能将争论传递给附有图书馆动画片段的类。不相信我?尝试一下!!!

嗯,对于谁给了我一个否定的人,试试这个

package {

    import flash.display.MovieClip;

    public class Main extends MovieClip
    {
        public function Main():void
        {
            var test:Block = new Block("test");
        }
    }
}

添加以下内容

package com {

    import flash.display.MovieClip;

    public class Block extends MovieClip
    {
        public function Block(test:String):void
        {
            trace(test);
        }
    }
}

然后创建一个块动画片段并将其附加到Block。确保将Block放入com文件夹。这样做时,您将获得以下内容

1136: Incorrect number of arguments.  Expected 0.

如果你把Block放到带有fla文件的根文件夹中,它应该可以正常工作。