2010-01-27 88 views
1

好吧,我已经提出了这些问题上千次,至今没有人能够帮助我。我再次提高,因为我发现了一些新的东西。在过去,我一直没能为类对象创建的参数,每次当我这样做,我得到以下错误AS3不接受构造函数

1136: Incorrect number of arguments. Expected 0. 

我注意到,我的课是子类影片剪辑或雪碧能时间有构造函数参数,但是我的类是子类的子类不是。这背后有什么理由吗?

var cloud = new Cloud(5, 4); 

package com.objects{ 
    import flash.events.Event; 
    import flash.utils.*; 

    public class Cloud extends gameObject { 

     public var maxSpeed = 30; 
     public var minSpeed = 5; 
     public var cspeed:Number = 0; 

     public function Cloud(min:Number = 0, max:Number = 0):void 
     { 
      var rand = Math.ceil(Math.random() * totalFrames); 
      gotoAndStop(rand); 
     } 

     public function rand(min:Number, max:Number):void 
     { 
      maxSpeed = max; 
      minSpeed = min; 
      cspeed = (Math.ceil(Math.random() * maxSpeed)+ minSpeed); 
     } 

     override public function updateObject():void 
     { 
      eApi.setChildIndex(this, (eApi.numChildren - 1)); 
      y += cspeed; 

      if(y > 800) 
       garbage = true; 
     } 


    } 
} 

这里是父类

package com.objects { 

    import flash.display.MovieClip; 
    import flash.display.Stage; 
    import flash.events.*; 
    import flash.utils.getTimer; 

    public class gameObject extends MovieClip implements IgameObject 
    { 
     public static var EG:Engine; 
     public var wPosX:Number = 0; 
     public var wPosY:Number = 0; 

     public var vPosX:Number = 0; 
     public var vPosY:Number = 0; 

     public var px:Number = 0; 
     public var py:Number = 0; 

     public var right:Number = 0; 
     public var bottom:Number = 0; 
     public var left:Number = 0; 
     public var top:Number = 0; 
     public var centerx:Number = 0; 
     public var centery:Number = 0; 
     static public var eApi:EngineApi; 
     public var health:Number = 1; 
     public var maxHealth:Number = 1; 
     protected var lastTime:Number; 
     public var ts:TargetSystem; 

     public var col:Number; 
     public var row:Number; 
     public var map:Number; 
     public var dead:Boolean = false; 

     public var garbage:Boolean = false; 

     public function gameObject():void { 

     }//End Constructor 

     static public function addEngine(e:EngineApi):void 
     { 
      eApi = e; 
     } 

     public function updateObject():void 
     { 

     } 
     public function Attack(dir:Number = -40):void 
     { 

     } 

     public function GarbageCollect():gameObject 
     { 
      return this; 
     } 

     public function getTime():int 
     { 
      var time:int = getTimer(); 
      return time; 
     } 
    } 
} 
+0

看来你的错误是在它没有引入参数时提供构造函数参数的结果。 – 2010-01-27 19:27:28

+0

请提供你的类的继承树与他们的开发者。安东尼福洛尼在他的假设中是正确的。此外,请显示您尝试实例化您的实例的方式。 – sberry 2010-01-27 19:34:20

+0

感谢您的回复。安东尼不正确。在我提供的代码中,我清楚地在构造函数中有参数。 – numerical25 2010-01-27 20:53:00

回答

3

它要通过的Flash IDE附加符号自定义类(影片剪辑,雪碧,..)谁在参数闪存完全不认识如何实例化这样一类,怎么能猜测你所期望的参数?

它只能实例化没有参数的类,你必须依靠另一种方式来稍后初始化你的类或者提供一个默认参数。

+0

那么你是说所有附有符号的自定义类都不能使用构造函数的参数 – numerical25 2010-01-27 21:01:45

+0

我想你可能是对的,因为它只适用于没有附加符号的类!我不明白为什么那么好。但碎片正在一起。请你详细说明一下。如果你可以的话。谢谢!! – numerical25 2010-01-27 21:04:08

+0

我说如果你有一个附加到自定义类需要参数的符号,它不能从IDE实例化,因为IDE不能猜测你期望的参数的值 – Patrick 2010-01-27 21:07:15

2

没有看到任何代码,我只能提供一些模糊的“是插在电脑上?” - 风格建议:

- 检查以确保没有与您的子类名称相同的现有类。尝试在课程末尾添加一些废话(即“MyClassFl4134qq”)以检查是否存在冲突 - 如果更改使其发挥作用,那就是您的问题。

- 确认你的子类没有标记为'final'。

- 检查以确保对“super(...)”构造函数的任何调用都具有正确数量的超类参数,而不是子类。

- 检查你的变量声明。确保分配给该变量的任何对象的类型与您声明的类型相匹配。

如果我不得不打赌,我会说你可能有类名冲突(见第1条建议)。

+0

对不起,它只是我之前发布的代码,没有人知道它是什么。我试图得到为什么它不能在这篇文章上工作的原因。但上面我添加了代码。 – numerical25 2010-01-27 20:59:16

1

您必须在子子类中实现构造函数。否则,flash将替换为不带任何参数的空构造函数。

+0

嗯好的答案......也许这是错误的假设我他实现了他正在尝试调用的构造函数。 +1 – iandisme 2010-01-27 19:58:02

相关问题