флеш простая кнопка с текстом - PullRequest
2 голосов
/ 30 апреля 2011

У меня есть простая кнопка во Flash cs5 - as3 с именем btn1 с динамическим текстом text_txt внутри.

Цель состоит в том, чтобы просто изменить текст, однако ...

btn1.visible=true; // works fine
this.btn1.text_txt.text="hello"; // give a NULL error

Мой вопрос: как программно изменить текст внутри этой кнопки?

Ответы [ 3 ]

3 голосов
/ 01 мая 2011

Поскольку у меня есть FlashDevelop, я могу только показать вам, как все делать программно.

Если вы имеете дело с Sprite объектом (который я рекомендую), то следующим образом вы получаете доступ к TextField в Sprite объекте:

var textField:TextField = new TextField();
textField.name = "textField";
textField.mouseEnabled = false;

var rectangleShape:Shape = new Shape();
rectangleShape.graphics.beginFill(0xFF0000);
rectangleShape.graphics.drawRect(0, 0, 100, 25);
rectangleShape.graphics.endFill();

var buttonSprite:Sprite = new Sprite();
buttonSprite.addChild(rectangleShape);
buttonSprite.addChild(textField);
addChild(buttonSprite);

var tf:TextField = TextField(buttonSprite.getChildByName("textField"));
tf.text = "button sprite text";

Сначала создается экземпляр объекта TextField с именем textField, а его свойству name присваивается строка "textField", которая совпадает с настройкой имени экземпляра.

Затем создается объект Shape с именем rectangleShape, который графически конфигурируется так, чтобы выглядеть как простой красный прямоугольник.

Затем создается экземпляр экранного объекта Sprite с именем buttonSprite и к нему добавляются экранные объекты textField и rectangleShape. Затем на сцену добавляется контейнер экранного объекта Sprite.

Наконец, вызывается метод getChildByName() контейнера buttonSprite контейнера экранного объекта и возвращает экранный объект textField. Для этого в качестве аргумента методов getChildByName() необходимо указать свойство name экранного объекта textField. Затем возвращенный объект textField сохраняется в локальном TextField объекте с именем tf, который теперь дает вам доступ к textField.

[UPDATE]

Ниже приведен подход к доступу к объекту TextField через объект SimpleButton, который аналогичен обращению к нему через объект Sprite (хотя я не рекомендую это):

var textField:TextField = new TextField();
textField.name = "textField";
textField.mouseEnabled = false;

var rectangleShape:Shape = new Shape();
rectangleShape.graphics.beginFill(0xFF0000);
rectangleShape.graphics.drawRect(0, 0, 100, 25);
rectangleShape.graphics.endFill();

var simpleButtonSprite:Sprite = new Sprite();
simpleButtonSprite.name = "simpleButtonSprite";
simpleButtonSprite.addChild(rectangleShape);
simpleButtonSprite.addChild(textField);

var simpleButton:SimpleButton = new SimpleButton();
simpleButton.upState = simpleButtonSprite;
simpleButton.overState = simpleButtonSprite;
simpleButton.downState = simpleButtonSprite;
simpleButton.hitTestState = simpleButtonSprite;
addChild(simpleButton);

// local simpleButtonSprite object
var sbs:DisplayObjectContainer = DisplayObjectContainer(simpleButton.upState);
//local textField object
var tf:TextField = TextField(sbs.getChildByName("textField"));  
tf.text = "simple button text ";
2 голосов
/ 01 мая 2011

нужно использовать базовый класс MovieClip btn1 нужно иметь 3 кадра и text_txt - textField

btn1.text_txt.text="blablabla"; // if MovieClip!!!

свойства кнопки у вас есть, что

btn1.buttonMode = true;
btn1.addEventListener(MouseEvent.MOUSE_OVER, overListener);
btn1.addEventListener(MouseEvent.MOUSE_OUT, outListener);
btn1.addEventListener(MouseEvent.CLICK, clickListener);

function overListener(e:MouseEvent):void{
 e.currentTarget.gotoAndStop(1)
}
function outListener(e:MouseEvent):void{
 e.currentTarget.gotoAndStop(2)
}
function clickListener(e:MouseEvent):void{
 e.currentTarget.gotoAndStop(3)
}

Или вы можете создать MyBtnClass(_text:String,_MovieClip:MovieClip), который делает вышеперечисленное. Извините мой английский

0 голосов
/ 04 ноября 2013

Существует простой способ доступа к дочерним элементам SimpleButton:

Например, в моем SimpleButton (с именем _myButton) в его рабочем состоянии у меня есть метка (ее имя экземпляра не имеет значения) иSprite (на слое 0):

var _container:DisplayObjectContainer = DisplayObjectContainer(_myButton.upState);<br> var _spt:Sprite = Sprite(_container.getChildAt(0));<br> var _lbl:Label = Label(_container.getChildAt(1));

Комментарии:
- Вы можете получить доступ к различным состояниям кнопки: upState, downState, hitTestState, overState;
- Вы можете привести к DisplayObjectContainer, чтобы получить дочерние элементы;
- Вы не можете использовать (по крайней мере напрямую) getChildByName, поскольку имена экземпляров будут генерироваться динамически.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...