AS3 не принимает конструктор - PullRequest
1 голос
/ 27 января 2010

Хорошо, я поднимал этот вопрос тысячу раз, и до сих пор никто не смог мне помочь. Я снова повышаю, потому что я обнаружил что-то новое. Раньше я не мог создавать параметры для объектов класса, каждый раз, когда я делаю это, я получаю следующую ошибку

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 ]

3 голосов
/ 27 января 2010

Если вы присоединяете символ через Flash IDE к пользовательскому классу (MovieClip, Sprite, ..), который принимает параметр flash не знает, как создать такой класс, как он может угадать ожидаемый параметр?

Он может только создавать экземпляр класса без аргументов, вы должны полагаться на другой способ инициализации вашего класса позже или предоставить параметр по умолчанию.

2 голосов
/ 27 января 2010

Не видя никакого кода, я могу предложить лишь несколько расплывчатых слов: «Подключен ли компьютер?» - рекомендации по стилю:

-Проверьте, чтобы убедиться, что нет существующих классов с таким же именем, как у вашего подкласса. Попробуйте добавить в конец своего класса какую-нибудь ерунду (например, «MyClassFl4134qq»), чтобы проверить наличие коллизий - если изменение заставляет его работать, это ваша проблема.

-Проверьте, чтобы класс, который вы разбиваете на подклассы, не был помечен как "окончательный".

-Проверьте, чтобы любые вызовы конструктора 'super (...)' имели правильное количество аргументов для суперкласса, а не для подкласса.

-Проверьте объявления переменных. Убедитесь, что тип объекта, который вы назначаете для этой переменной, соответствует типу, который вы объявили как.

Если бы мне пришлось делать ставку, я бы сказал, что у вас, вероятно, конфликт имен классов (см. 1-е предложение).

1 голос
/ 27 января 2010

Вы должны реализовать конструктор в подклассе. В противном случае flash заменит пустой конструктор, который не принимает аргументов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...