【问题标题】:1136: Incorrect number of arguments. Expected 01136:参数数量不正确。预期 0
【发布时间】:2010-01-18 22:42:25
【问题描述】:

我一次又一次地问这个问题,但没有得到答案。每次我得到它时,它都让我发疯。有时它起作用,有时它不起作用。当我通过构造函数传递一个对象时,它会给我错误消息。所以我总是要另辟蹊径让它发挥作用。这是我的代码,如果有人可以请帮助我

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);
        }
    }
}

如果有人可以帮助我,那就太好了

【问题讨论】:

  • eApi.addGameChild的声明是什么?
  • 问题不在于 eApi。我做了一些故障排除,如果我从沙漠风暴参数中删除船舶变量,错误就会消失。现在到目前为止,flash 说它需要 0 个参数。所以如果我从参数中删除 ship 并保留 public function DesertStorm(target:Object):void。这是我得到的错误......'1203:在基类 com.objects:desertStorm 中找不到默认构造函数。'我不确定这意味着什么,但听起来我没有构造函数

标签: flash actionscript-3 actionscript


【解决方案1】:

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

那是我的问题。对于(fla)库中的影片剪辑,我必须修改 Symbol Properties > Class name 框以包含文件夹路径。

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

【讨论】:

    【解决方案2】:

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

    eApi.addGameChild(turret1);
    

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

    【讨论】:

    • 不是。如果我从 DesertStorm() 参数中删除“ship”,并将其从构造函数参数中删除,错误就会消失
    • 我已经无数次遇到这个问题了,我不知道我得到了一个坏副本还是什么
    • 我以前遇到过这些问题,我通常只是创建另一种方法来获取这些参数,但现在它困扰着我,我宁愿以正确的方式去做
    • 您是否尝试过显式调用 super() 构造函数? (Stinger 的构造函数有多少个参数?)
    【解决方案3】:

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

    super();

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

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

    编辑:似乎 Gabriel McAdams 在我之前提出了这个问题,但我没有及时看到他的评论。

    【讨论】:

      【解决方案4】:

      更新答案:#

      This listing of compiler errors 说:

      如果基类有 1 个或多个必需参数,则必须使用 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 并保留公共功能 沙漠风暴(目标:对象):无效。这是我得到的错误....
      '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);
      

      【讨论】:

      • 我没有将任何项目从图书馆拖到舞台上。我已经完成并创建了动画剪辑,并将它们链接到我为它们创建的自定义类。
      【解决方案5】:

      我发现如果你不小心把class文件和fla文件放在不同的文件夹里,就会出现1136错误。确保类文件被 fla 文件找到。

      【讨论】:

        【解决方案6】:

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

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

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

        com.company.project.MyClass
        

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

        【讨论】:

          【解决方案7】:

          原来问题出在库中附加到影片剪辑的自定义类上。出于某种原因,您不能将争论传递给具有附加库中的影片剪辑的类。不相信我?试试看!!!

          嗯,谁给我否定的,试试这个

          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 放入 com 文件夹。这样做时,您会得到以下内容

          1136: Incorrect number of arguments.  Expected 0.
          

          如果您将 Block 放入带有 fla 文件的根文件夹,它应该可以正常工作。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-03-29
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-02-20
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多