2012-05-02 3 views
0

В настоящее время у меня есть массив, в котором есть 9 кнопок. Это называется BAR.as: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]) 
     } 

В классе для моей кнопки я указывающего функцию enableButton, это называется 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

Единственная проблема тогда в том, что я использовал ее как статическую функцию, а не только публичную функцию? (он работает сейчас) –