我的电影中有一个名为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";
}
答案 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
对象的upState
,overState
和downState
属性创建一个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并不适合这种用途。