2012-05-02 2 views
0

現在、私は9個のボタンが押し込まれている配列を持っています。これが呼び出されるBAR.as:私はenableButton機能を指定している私のボタンのクラス内AS3 - 配列を介して静的関数にアクセス

public static var buttonArray: Array = new Array() 

for(var i:int = 0; i<9; i++){ 
      barButton = new button 
      buttonArray.push(barButton) 
      buttonArray[i].name = button+(String[i]) 
      buttonArray[i].x = 15+(i*buttonArray[i].width) 
      addChild(buttonArray[i]) 
     } 

、これが呼び出されACTIONBARBUTTON.as:

public static function enableButton(shortcut:int):void{ 
     //instance.refreshThis(shortcut, true) 
     trace("test") 
    } 

は、私は何をしようとしていることは持っています私がこれらのボタンを有効/無効にするために呼び出すことのできる機能(単に ".enable"/"disable")をオンデマンドで使用することができます。これを行うための私の方法は、BAR.as通過するつもりだった。

public static function updateWeapons(level: int):void{ 
     buttonArray[level-1].enableButton(level) 
    } 

はしかし、これは次のエラーを返します。

ReferenceError: Error #1069: Property enableButton not found on src.actionbar.button and there is no default value. 
at src.actionbar::bar$/updateWeapons() 
at src.game::player$/levelup() 
at src.game::gameplay/init() 
at flash.display::DisplayObjectContainer/addChildAt() 
at src.camera::control() 
at flash.display::Sprite/constructChildren() 
at flash.display::Sprite() 
at flash.display::MovieClip() 

ちょうどbutton.enableButtonを実行している(1)正常に動作します。

答えて

0

クラスのインスタンスに対して静的メンバー関数を呼び出すことはできません。

buttonArray[level-1].enableButton(level) 

動作しません。これはなぜだ

。 enableButton関数を静的でないものにして、それが動作するはずです。

button.enableButton(1) 

クラス名「ボタン」を使用して関数を呼び出すため、正常に機能します。

+0

これは、配列を介して呼び出された10個の "ボタン"があるため、問題を引き起こします。私はどのように "enabledButton(1)"をbutton3にキャストしますか? –

+0

ボタンを配列内に保持しているので、次のようにすることができます: function enableButton(index:int):void { buttonArray [index] .enableButton(); } インデックスが範囲外でないことを確認してください。 –

+0

それから、唯一の問題は私が静的な関数として持っていたことであり、単なるpublic関数ではないということでしたか? (現在動作します) –

関連する問題