Flash AS3-获取错误#1063,预期为1,但即使有效也得到了0?
AS3新手在这里 我的舞台上有一个movieclip(thePlayer)和类“thePlayer”,里面有一个简单的按钮和类StopBtn。这两个类都保存在名为“classes”的文件夹中 “ThePlayer”类将声音加载到soundchannel中,然后从“StopBtn”类播放。我正在为movieclip中已在舞台上的按钮添加事件侦听器,然后从“StopBtn”类停止“ThePlayer”中设置的soundchannel变量 为此,我将“this”传递给StopBtn()函数,以便能够控制“ThePlayer”中设置的soundchannel变量 该按钮似乎工作正常,但我在输出面板中发现以下错误: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()函数,以便能够控
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第一种解决方案有效!我尝试了第二种方法,但从层中得到一个错误。与原始错误相同,但不在输出面板中的编译器错误中。尽管最上面的方法很有效!谢谢:)