2011-11-11 45 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

相關問題