Ошибка Flash # 1063: несоответствие числа аргументов - PullRequest
0 голосов
/ 21 марта 2011
ArgumentError: Error #1063: Argument count mismatch on scripts::GamePlay(). Expected 1, got 0.
    at flash.display::Sprite/constructChildren()
    at flash.display::Sprite()
    at flash.display::MovieClip()

У меня есть некоторые из этих ошибок при компиляции, и я знаю решение.

public function GamePlay(stageRef:Stage)
        {
            this.stageRef = stageRef;
            player = new Player(stageRef);

            waitTimer.addEventListener(TimerEvent.TIMER_COMPLETE, WaitTimer, false, 0, true);
            waitTimer.start();

            player.addEventListener(Event.REMOVED_FROM_STAGE, PlayerRemoved, false, 0, true);
        }

В конструкторе я должен добавить stageRef: Stage = null, это решит ошибку, но если ясделать так, чтобы все мои таймеры думали, что сцена пуста или что-то пусто, например так.

TypeError: Error #1009: Cannot access a property or method of a null object reference.
    at scripts::GamePlay/WaitTimer()[C:\Users\Noodles\Documents\Flash Projects\BlockDrop\scripts\GamePlay.as:71]
    at flash.events::EventDispatcher/dispatchEventFunction()
    at flash.events::EventDispatcher/dispatchEvent()
    at flash.utils::Timer/tick()

Что я могу сделать, чтобы исправить эту ошибку?

Ответы [ 2 ]

2 голосов
/ 21 марта 2011

Когда вы вызываете GamePlay, укажите параметр Stage.

function fn() //calling function
{
 GamePlay(Stage); //pass Stage to the GamePlay function.
}
1 голос
/ 21 марта 2011

Вы создаете этот объект в конструкторе класса документа вашего основного приложения?Если это так, вы столкнетесь с этой проблемой, даже если остальная часть вашего кода будет идеальной из-за того, как работает Flash Player.

По сути, «Сцена» равна нулю, пока ваше основное приложение не будет добавлено на сцену.Это быстрый путь к множеству необычных действий и трудно обнаруживаемых ошибок.Очень распространенным решением является минимизация кода в конструкторе класса вашего документа.Вместо того, чтобы помещать вашу логику инициализации в конструктор, ваш конструктор просто добавляет прослушиватель событий для Event.ADDED_TO_STAGE, и ваша логика переходит в ваш обработчик.Это выглядело бы примерно так:

protected var gamePlay:GamePlay;

public function MyConstructor():void {
     this.addEventListener(Event.ADDED_TO_STAGE, addedHandler, false, 0, true);
}

protected function addedHandler(e:Event):void {
     this.removeEventListener(Event.ADDED_TO_STAGE, addedHandler);
     gamePlay = new GamePlay(this.stage);
}

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

...