我在Flash cs5中有一个简单的按钮 - as3,名为btn1,里面有一个名为text_txt的动态文本。
目标只是改变文字......
btn1.visible=true; // works fine
this.btn1.text_txt.text="hello"; // give a NULL error
我的问题是:如何以编程方式更改该按钮内的文字?
答案 0 :(得分:3)
因为我有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
的{{1}}对象,并为其textField
属性分配字符串“textField”,这与设置其实例名称相同。
接下来,实例化一个名为name
的{{1}}对象,该对象以图形方式配置为看起来像一个简单的红色矩形。
接下来,实例化名为Shape
的{{1}}显示对象对象,并向其添加rectangleShape
和Sprite
个显示对象。然后将buttonSprite
显示对象容器添加到舞台中。
最后调用textField
显示对象容器的rectangleShape
方法并返回Sprite
显示对象。为此,必须将buttonSprite
显示对象的name属性作为getChildByName()
方法的参数给出。接下来,返回的textField
对象存储在名为textField
的本地getChildByName()
对象中,现在可以访问textField
。
<强> [UPDATE] 强>
以下是通过TextField
对象访问tf
对象的方法,类似于通过textField
对象访问它(我不建议这样做):
TextField
答案 1 :(得分:2)
需要使用基本类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)
。
对不起我的英文
答案 2 :(得分:0)
有一种简单的方法可以访问SimpleButton的子项:
例如,在我的SimpleButton(名为_myButton)的up状态中,我有一个标签(它的实例名称无关紧要)和一个Sprite(在0层):
var _container:DisplayObjectContainer = DisplayObjectContainer(_myButton.upState);
var _spt:Sprite = Sprite(_container.getChildAt(0));
var _lbl:Label = Label(_container.getChildAt(1));
<强>注释:强>
- 您可以访问不同的按钮状态:upState,downState,hitTestState,overState;
- 您可以转换为DisplayObjectContainer以获取子项;
- 您不能使用(至少直接)getChildByName,因为实例名称将动态生成。
答案 3 :(得分:0)
将此类添加到按钮中:
usage example:
var my_btn_01 : SimpleButtonTf; //add you button instance name here
write > my_btn_01.text = "ABC"
read > trace(my_btn_01.text) //output "ABC"
package classes {
import flash.display.Sprite;
import flash.display.SimpleButton;
import flash.display.DisplayObjectContainer;
public class SimpleButtonTf extends SimpleButton {
private var lbl_up:TextField;
private var lbl_down:TextField;
private var lbl_over:TextField;
public function SimpleButtonTf(){
//this.super();
var _container_up:DisplayObjectContainer = DisplayObjectContainer(this.upState);
var _container_down:DisplayObjectContainer = DisplayObjectContainer(this.downState);
var _container_over:DisplayObjectContainer = DisplayObjectContainer(this.overState);
lbl_up = _container_up.getChildAt(1) as TextField;
lbl_down = _container_down.getChildAt(1) as TextField;
lbl_over = _container_over.getChildAt(1) as TextField;
}
public function set text(str:String):void {
lbl_up.text = str;
lbl_down.text = str;
lbl_over.text = str;
}
public function get text():String {
return lbl_up.text;
}
}
}