ActionScript 3:更改按钮文本

时间:2011-04-24 13:57:26

标签: actionscript-3 actionscript button flash-cs5

我的电影中有一个名为Button的按钮实例,此实例中有一个名为myText的动态文本对象,如何更改文本?我已经尝试过Button.myText.text =“Stuff”;

我得到错误“场景1,图层'第1层',第1帧,第7行1119:通过静态类型flash.display:SimpleButton的引用访问可能未定义的属性myText。”当我编译。

AS

import flash.events.MouseEvent;

TheButton.addEventListener(MouseEvent.CLICK, onClick);

function onClick(Event:MouseEvent):void{
    TheButton.myText.text = "Moo";
}

4 个答案:

答案 0 :(得分:3)

您不能像在AS2中那样使用点语法来访问AS3中的显示对象容器的子显示对象。通常,您将使用显示对象容器的getChildByName()方法来获取其子显示对象,但是因为您处理的SimpleButton实例是DisplayObject的子类,该方法不存在。简单的解决方案是将按钮从按钮更改为动画片段,之后应执行以下操作:

TheButton.addEventListener(MouseEvent.CLICK, onClick);

function onClick(Event:MouseEvent):void
{
    TheButton.getChildByName("myText").text = "Moo";

}

注意:TextField显示对象容器中的TheButton显示对象必须具有实例名称“myText”,显然TheButton显示对象容器的实例名称必须为“ TheButton”。

此外,如果你采用这种方法,你可能想要重写代码如下:

import flash.display.DisplayObjectContainer
import flash.events.MouseEvent;
import flash.text.TextField;

button.addEventListener(MouseEvent.CLICK, onButtonClick);

function onButtonClick(e:MouseEvent):void
{
    var button:DisplayObjectContainer = DisplayObjectContainer(e.target);
    var textField:TextField = TextField(button.getChildByName("textField"));
    textField.text = "Moo";

}// end function

<强> [UPDATE]

另一个解决方案是为SimpleButton对象的upStateoverStatedownState属性创建一个movieclip / sprite对象,如下所示:

import flash.display.DisplayObjectContainer;
import flash.display.SimpleButton;
import flash.display.Graphics;
import flash.display.Shape;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.text.TextField;

var simpleButton:SimpleButton = new SimpleButton();
addChild(simpleButton);

var content:Sprite = new Sprite();
draw(content.graphics, 0xFF0000);

var textField:TextField = new TextField();
textField.name = "textField";
textField.text = "UP";
content.addChild(textField);

simpleButton.upState = content;
simpleButton.overState = content;
simpleButton.downState = content;
simpleButton.hitTestState = content;

simpleButton.addEventListener(MouseEvent.MOUSE_OVER, onSimpleButtonMouseOver);
simpleButton.addEventListener(MouseEvent.MOUSE_DOWN, onSimpleButtonMouseDown);
simpleButton.addEventListener(MouseEvent.MOUSE_OUT, onSimpleButtonMouseOut);
simpleButton.addEventListener(MouseEvent.MOUSE_UP, onSimpleButtonMouseUp);

function onSimpleButtonMouseOver(e:MouseEvent):void
{
    var content:DisplayObjectContainer = DisplayObjectContainer(SimpleButton(e.target).overState);
    var textField:TextField = TextField(content.getChildByName("textField"));
    textField.text = "OVER";
    draw(content.graphics, 0xC8C8C8);

}// end function

function onSimpleButtonMouseDown(e:MouseEvent):void
{
    var content:DisplayObjectContainer = DisplayObjectContainer(SimpleButton(e.target).downState);
    var textField:TextField = TextField(content.getChildByName("textField"));

    textField.text = "DOWN";
    draw(content.graphics, 0x646464);

}// end function

function onSimpleButtonMouseUp(e:MouseEvent):void
{
    var content:DisplayObjectContainer = DisplayObjectContainer(SimpleButton(e.target).overState);
    var textField:TextField = TextField(content.getChildByName("textField"));

    textField.text = "OVER";
    draw(content.graphics, 0xC8C8C8);

}// end function

function onSimpleButtonMouseOut(e:MouseEvent):void
{
    var content:DisplayObjectContainer = DisplayObjectContainer(SimpleButton(e.target).upState);
    var textField:TextField = TextField(content.getChildByName("textField"));

    textField.text = "UP";
    draw(content.graphics, 0xFF0000);

}// end function

function draw(graphics:Graphics, color:uint):void
{
    graphics.clear();
    graphics.beginFill(color)
    graphics.drawRect(0, 0, 100, 100);
    graphics.endFill();

}// end function

答案 1 :(得分:1)

这非常容易。

假设我有一个名为 myBtn 的“组件”菜单创建的按钮。

myBtn.label = "Awesome text";

您使用标签而不是在其上创建文本字段,然后设置texfield的文本。

就是这样!

答案 2 :(得分:0)

如果没有关于您是否收到错误以及它们是什么的额外信息,我的第一个假设是系统在变量名称“Button”方面遇到问题。已经有一个名为“Button”的类,所以我认为系统认为你正在尝试调用类Button的类级方法/ var而不是访问名为“Button”的变量。我会尝试将按钮var的名称更改为唯一的。

答案 3 :(得分:0)

从ActionScript中无法访问SimpleButton的子项;注意它实际上并没有扩展DisplayObjectContainer。 SimpleButton类有点突变。

您必须使用容器MovieClip并将SimpleButton和标签TextField放在里面。或者,您可以从MovieClip中滚动自己的按钮或使用组件库。 SimpleButton并不适合这种用途。