Flash AS3-获取错误#1063,预期为1,但即使有效也得到了0?

Flash AS3-获取错误#1063,预期为1,但即使有效也得到了0?,flash,actionscript-3,this,Flash,Actionscript 3,This,AS3新手在这里 我的舞台上有一个movieclip(thePlayer)和类“thePlayer”,里面有一个简单的按钮和类StopBtn。这两个类都保存在名为“classes”的文件夹中 “ThePlayer”类将声音加载到soundchannel中,然后从“StopBtn”类播放。我正在为movieclip中已在舞台上的按钮添加事件侦听器,然后从“StopBtn”类停止“ThePlayer”中设置的soundchannel变量 为此,我将“this”传递给StopBtn()函数,以便能够控

AS3新手在这里

我的舞台上有一个movieclip(thePlayer)和类“thePlayer”,里面有一个简单的按钮和类StopBtn。这两个类都保存在名为“classes”的文件夹中

“ThePlayer”类将声音加载到soundchannel中,然后从“StopBtn”类播放。我正在为movieclip中已在舞台上的按钮添加事件侦听器,然后从“StopBtn”类停止“ThePlayer”中设置的soundchannel变量

为此,我将“this”传递给StopBtn()函数,以便能够控制“ThePlayer”中设置的soundchannel变量

该按钮似乎工作正常,但我在输出面板中发现以下错误:

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()函数,但是当我运行文件并按下stage上的stop按钮时,它工作了

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

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

}
}

感谢您的帮助!

我猜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);
   } 
 }
//...


我相信您正在创建两个
StopBtn
s,第一个是您在movieclip中的stage上定义的,它被创建,构造函数没有参数,因此出现了错误。第二个是用
new
关键字实例化的,但从未作为子级添加。如果您想消除错误,而不是修复代码,您可以使用:
公共函数StopBtn(recivedPlayerClass:ThePlayer=null)使
recivedPlayerClass
成为可选参数
,然后检查null并返回;谢谢Patrik第一种解决方案有效!我尝试了第二种方法,但从层中得到一个错误。与原始错误相同,但不在输出面板中的编译器错误中。尽管最上面的方法很有效!谢谢:)