2011-11-11 53 views
2

AS3 newby here!AS3 - 获得错误#1063,预期1,即使它有效,也得到0?

我的舞台上有一个moviePip(thePlayer),它的类是'ThePlayer',而MovieClip里面有一个SimpleButton,它带有StopBtn类。这两个类都保存在一个名为'classes'的文件夹中。

'ThePlayer'类将声音加载到soundchannel然后播放,从'StopBtn'类中,我为已经在动画片段内的舞台上的按钮添加了一个事件监听器,然后停止soundchannel var set in班级'StopBtn'中的'ThePlayer'。

要做到这一点我传递“这个”的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()函数,但是当我运行该文件,并按下舞台上的停止按钮,它的工作原理.. 。

一直对我的头撞w所有这现在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',第一个是你在动画片段内的舞台上定义的 - 它被创建并且构造函数没有参数,因此是错误。第二个是用'new'关键字实例化的,但从不添加为孩子。如果你想抑制错误并且不修复代码,你可以使用'public function StopBtn(recivedPlayerClass:ThePlayer = null)'将'recivedPlayerClass'设置为一个可选参数,然后检查null和'return;' –

回答

1

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

Thanks Patrik第一个解决方案有效!我尝试了第二种方法,但是在编译器错误中,我从ThePlayer.as中得到了一个与原始错误相同的错误,但不是在输出面板中。 虽然顶级的作品很棒!谢谢 :) – TomFrom

相关问题