带文本的flash简单按钮

带文本的flash简单按钮,flash,actionscript-3,Flash,Actionscript 3,我在Flash cs5-as3中有一个名为btn1的简单按钮,里面有一个名为text_txt的动态文本 目标只是简单地改变文本,但是 btn1.visible=true; // works fine this.btn1.text_txt.text="hello"; // give a NULL error 我的问题是:如何以编程方式更改按钮内的文本?因为我有FlashDevelop,所以我只能向您展示如何以编程方式执行所有操作 如果您处理的是Sprite对象(我推荐),那么以下是您在Sprit

我在Flash cs5-as3中有一个名为btn1的简单按钮,里面有一个名为text_txt的动态文本

目标只是简单地改变文本,但是

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

我的问题是:如何以编程方式更改按钮内的文本?

因为我有FlashDevelop,所以我只能向您展示如何以编程方式执行所有操作

如果您处理的是
Sprite
对象(我推荐),那么以下是您在
Sprite
对象中访问
TextField
的方式:

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”,该字符串与设置其实例名称相同

接下来实例化一个名为
rectangleShape
Shape
对象,该对象以图形方式配置为看起来像一个简单的红色矩形

接下来,将实例化名为
buttonSprite
Sprite
显示对象对象,并将
textField
rectangleShape
显示对象添加到其中。然后将
Sprite
显示对象容器添加到后台

最后,调用
按钮写入
显示对象容器的
getChildByName()
方法,并返回
文本字段
显示对象。为此,
textField
display对象的name属性必须作为
getChildByName()
methods的参数提供。接下来,返回的
textField
对象存储在名为
tf
的本地
textField
对象中,现在您可以访问
textField

[更新]

以下是通过
SimpleButton
对象访问
TextField
对象的方法,类似于通过
Sprite
对象访问它(但我不建议这样做):


需要使用基本类MovieClip吗 btn1需要有3个框架和文本\u txt-文本字段

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(\u text:String,\u MovieClip:MovieClip)
,以实现上述功能。
抱歉,我的英语

有一种简单的方法可以访问SimpleButton的子项:

例如,在处于启动状态的SimpleButton(名为_myButton)中,我有一个标签(其实例名称无关紧要)和一个精灵(位于层0):

var\u container:DisplayObjectContainer=DisplayObjectContainer(\u myButton.upState)
var_spt:Sprite=Sprite(_container.getChildAt(0))
var_lbl:Label=Label(_container.getChildAt(1));

评论:
-您可以访问不同的按钮状态:upState、downState、hitTestState、overState
-您可以强制转换到DisplayObjectContainer以获取子对象

-您不能(至少直接)使用getChildByName,因为实例名称将动态生成。

将此类添加到按钮中:

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;
        }
    }
}

btn1
扩展什么类<代码>简单按钮<代码>电影剪辑<代码>精灵?我知道你说你有一个“简单的按钮”,但答案取决于它扩展了什么类。您是通过编程还是手动创建btn1
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;
        }
    }
}