AS3不接受构造函数

时间:2010-01-27 19:24:22

标签: flash actionscript-3 actionscript

好的,我已经提出了这个问题一千次,到目前为止还没有人能够帮助我。我再次提高,因为我发现了一些新东西。在过去,我无法为类对象创建参数,每次我这样做时都会出现以下错误

1136: Incorrect number of arguments.  Expected 0.

我注意到我作为Movie Clip或Sprite的子类的类能够有构造函数参数,但是作为子类的子类的类不是。这背后有什么理由吗?

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

3 个答案:

答案 0 :(得分:3)

您正在通过 Flash IDE 符号附加到正在执行参数闪光的自定义类(MovieClip,Sprite,..) 不知道如何实现这样的类,它怎么能猜出你期望的参数呢?

它只能实现没有参数的类,你必须依赖另一种方法来启动你的类或者提供一个默认参数。

答案 1 :(得分:2)

在没有看到任何代码的情况下,我只能提出一些模糊的说法,“计算机是否插上电源?” - 风格建议:

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

- 确保您正在继承的课程未标记为“最终”。

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

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

如果我不得不下注,我会说你可能有班级名称冲突(参见第1条建议)。

答案 2 :(得分:1)

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