AS3 - エラー#1063の取得、期待された1、動作しても0が得られましたか?

AS3 newbyここ!

私はクラス 'ThePlayer'で私のステージにムービークリップ(thePlayer)を持っていて、ムービークリップの内側にはStopBtnクラスのSimpleButtonがあります。どちらのクラスも「クラス」というフォルダに保存されます。

'ThePlayer'クラスは、サウンドチャンネルにサウンドをロードして再生し、 'StopBtn'クラスから再生します。ムービークリップ内のステージに既にあるボタンのイベントリスナーを追加してから、 'ThePlayer'のsoundchannel varセットをクラス 'StopBtn'。

これを行うには、 'ThePlayer'で設定されたサウンドチャネル変数を制御できるように、StopBtn()関数に 'this'を渡します。

ボタンは完全に機能しているようですが、出力パネルにこのエラーが表示されます:

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
追加された
ビュー: 1
2つの StopBtn を作成していると思います。最初はムービークリップ内のステージで定義したものです。作成され、コンストラクタにはパラメータがないためエラーになります。 2番目は 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
追加された
パトリックの最初のソリューションがありがとうございます!私は2番目の方法を試しましたが、私はThePlayer.asから、オリジナルのエラーと同じエラーが出ますが、出力エラーのパネルではなく、コンパイラエラーです。一番上の作品は素晴らしいです!ありがとうございました :)
追加された 著者 TomFrom,