AS3 - Получение ошибки # 1063, Ожидаемое 1, получено 0, хотя оно работает?

AS3 newby здесь!

У меня есть мувиклип (thePlayer) на моей сцене с классом «ThePlayer», и внутри этого мувиклипа есть SimpleButton с классом StopBtn. Оба класса сохраняются в папке с именем «classes».

Класс «ThePlayer» загружает звук в звуковой канал, а затем воспроизводит из класса «StopBtn». Я добавляю прослушиватель событий для кнопки, которая уже находится на сцене внутри мувиклипа, а затем останавливает звуковой канал var, установленный в «ThePlayer», из класс «StopBtn».

Для этого я передаю «это» функции StopBtn (), чтобы иметь возможность управлять переменной soundchannel, установленной в «ThePlayer»,

Кажется, что кнопка работает отлично, но я получаю эту ошибку на панели вывода:

ArgumentError: Error #1063: Argument count mismatch on classes::StopBtn(). Expected 1, got 0.
at flash.display::Sprite/constructChildren()
at flash.display::Sprite()
at flash.display::MovieClip()
at classes::ThePlayer()
at flash.display::Sprite/constructChildren()
at flash.display::Sprite()
at flash.display::MovieClip()

Я считаю, что он считает, что в StopBtn-классе ничего не передается функции StopBtn (), но когда я запускаю файл и нажимаю кнопку остановки на сцене, он работает ...

Я бил головой о стену с этим в течение 4 дней :(

Вот мой код для обоих классов:

<�Сильный> ThePlayer.as

package classes
{

import flash.display.*;
import flash.media.*;
import flash.net.*;
import flash.events.*;

public class ThePlayer extends MovieClip
{

    //Link vars to classes for accessing vars here in different classes
    public var _stopBtn:StopBtn;

   //Public and private Vars
    public var mySound:Sound = new Sound();
    public var mySoundChannel:SoundChannel = new SoundChannel();
    public var trackPosition:Number = 0;
    public var isPlaying:Boolean = false;


    //Constructor function
    public function ThePlayer()
    {
        _stopBtn = new StopBtn(this);

        mySound.load(new URLRequest("mp3_files/song.mp3"));
        mySoundChannel = mySound.play();
        isPlaying = true;
    }
}
}

<�Сильный> StopBtn.as

package classes
{

import flash.display.*;
import flash.media.*;
import flash.net.*;
import flash.events.*;

public class StopBtn extends SimpleButton
{

    var playerClass:ThePlayer;

    public function StopBtn(recivedPlayerClass:ThePlayer)
    {
        playerClass = recivedPlayerClass;
        playerClass.addEventListener(MouseEvent.CLICK, stopButtonFunction);
    }

    function stopButtonFunction(event:MouseEvent):void
    {
        playerClass.trackPosition = 0;
        playerClass.mySoundChannel.stop();
        playerClass.isPlaying = false;
        //playerClass.pauseBtn.visible = false;
        //playerClass.playPause.playBtn.visible = true;
    }

}
}

Спасибо за вашу помощь!

2
Я считаю, что вы создаете два StopBtn s, первый - тот, который вы определили на сцене внутри мувиклипа - он создается, а конструктор не получает никаких параметров, следовательно, ошибка. Второй - это экземпляр с вашим ключевым словом new , но он никогда не добавляется в качестве дочернего элемента. Если вы хотите подавить ошибку и не исправить код, вы можете сделать recivedPlayerClass необязательным параметром с помощью: public function StopBtn (recivedPlayerClass: ThePlayer = null) , затем проверьте для null и return;
добавлено автор Steve Lewis, источник

1 ответы

Я полагаю, что StopBtn создан во Flash IDE, или в IDE нет способа узнать, какой параметр должен быть передан конструктору StopBtn, следовательно, ошибка.

Например, вы можете создать аргумент по умолчанию для конструктора или один без параметра, но с дополнительным методом init:

public class StopBtn extends SimpleButton {
 var playerClass:ThePlayer;

 public function StopBtn(recivedPlayerClass:ThePlayer = null)//default constuctили
 { 
   if (recivedPlayerClass!=null) {
     playerClass = recivedPlayerClass;
     playerClass.addEventListener(MouseEvent.CLICK, stopButtonFunction);
   } 
 }
//...

или

public class StopBtn extends SimpleButton {
 var playerClass:ThePlayer;

 public function StopBtn() {
 }

 public function init(recivedPlayerClass:ThePlayer):void {
     playerClass = recivedPlayerClass;
     playerClass.addEventListener(MouseEvent.CLICK, stopButtonFunction);
 }
//...
1
добавлено
Спасибо Patrik, первое решение работает! Я пробовал 2-й способ, но я получаю сообщение об ошибке от ThePlayer.as так же, как и исходная ошибка, но не в панели вывода, в ошибках компилятора. Верхний работает отлично! Спасибо :)
добавлено автор TomFrom, источник