AS3 - Получение ошибки # 1063, Ожидаемый 1, получил 0, даже если он работает? - PullRequest
2 голосов
/ 11 ноября 2011

AS3 newby here!

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

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

Для этого я передаю 'this' в функцию 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;
    }

}
}

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

1 Ответ

1 голос
/ 11 ноября 2011

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

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

public class StopBtn extends SimpleButton {
 var playerClass:ThePlayer;

 public function StopBtn(recivedPlayerClass:ThePlayer = null) // default constuctor
 { 
   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);
 }
//...
...