2013-09-06 4 views
0

Я делаю экран выбора уровня, и мне нужно текстовое поле для отображения разных номеров уровней для каждого уровня. Я действительно не понимаю, что я делаю неправильно здесь, но я перейду к тому, что сделал, и разместил соответствующий код.Изменение текстового поля кнопки для цикла

У меня есть класс кнопки (связанный) и внутри символа У меня есть динамическое текстовое поле. У меня есть два класса релевантности: LevelSelectScreen и LevelSelectButtons (довольно понятно, что это такое). Я подумал, что было бы очень легко изменить текст, если бы я сделал это внутри класса LevelSelectButtons, просто сделав levelText.text = "Wanted Text", где levelText - это имя экземпляра для моей кнопки (только текстовое поле поверх моей графики для кнопки). К сожалению, это дает такую ​​общую и досадную ошибку: TypeError: Error # 1009: Не удается получить доступ к свойству или методу ссылки на нулевой объект.

Я пробовал делать то же самое в классе LevelSelectScreen во время моей петли, но у меня такая же ошибка. Помощь в том, как получить этот levelText для работы, очень ценится! Вот соответствующий код.

LevelSelectScreen

public class LevelSelectButtons extends SimpleButton { 

     public var levelNumber:int; 
     public var levelSelectScreen:LevelSelectScreen; 

     public function LevelSelectButtons(i) { 

      x = 200; 
      y = 100 + 50*i; 
      addEventListener(MouseEvent.CLICK,LevelSelectClicked,false,0,true) 
      levelNumber = i; 
      levelText.text = "Level" + i; 
     } 

    } 

LevelSelectScreen

public class LevelSelectScreen extends MovieClip { 

    public var levelSelectButtons:LevelSelectButtons; 
    public var mainMenuButton:MainMenuButton; 

    public function LevelSelectScreen() { 

      for (var i:int = 1; i<=2; i++) 
      { 
       levelSelectButtons = new LevelSelectButtons(i); 
       addChild(levelSelectButtons); 
      } 
    } 

} 

ответ

2

Вы не можете иметь динамическое текстовое поле в SimpleButton.
Раздражающий, я знаю.

Простое исправление заключается в том, чтобы LevelSelectButton обертывал SimpleButton вместо его расширения. Тогда ваше текстовое поле будет внутри LevelSelectButton поверх текстового элемента SimpleButton. (Обязательно установите mouseEnabled ложь на текстовое поле, так что не мешает событий мыши на SimpleButton.

Более сложный вариант должен был бы написать свой собственный пользовательский класс кнопку.
Это на самом деле не так уж сложно , но может быть излишним для того, что вы пытаетесь сделать здесь.

+1

Чтобы добавить к этому ответу, SimpleButton - это DisplayObject, но не DisplayObjectContainer и, следовательно, не может содержать другие объекты DisplayObject (например, TextField). Я считаю, что текстовое поле «нарисовано» на th e SimpleButton вместо добавления к нему в качестве дочернего элемента. http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/SimpleButton.html – Ohas

+0

Отличный ответ, отлично работает благодаря =) – spaderdabomb

-1

его, потому что вы не объявили levelText переменной, и вы пытаетесь получить к нему доступ, для этого не удается получить доступ к собственности или метод nul l ссылка на объект.

+0

Не было ни слова, но ответы должны помочь работать с решением, а не просто указать, что не так. Я имею в виду, я понимаю сообщение об ошибке. .., который почти весь ваш ответ – spaderdabomb

Смежные вопросы