ActionScript3: изменение текста кнопки - PullRequest
3 голосов
/ 24 апреля 2011

У меня есть экземпляр кнопки с именем Button, который есть в моем фильме, в этом экземпляре есть объект Dynamic Text с именем myText, как я могу изменить текст?Я уже пробовал Button.myText.text = "Stuff";

Я получаю сообщение об ошибке "Сцена 1, Слой" Слой 1 ", Кадр 1, Строка 7 1119: Доступ к возможно неопределенному свойству myText через ссылку сстатический тип flash.display: SimpleButton. "Когда я компилирую.

AS:

import flash.events.MouseEvent;

TheButton.addEventListener(MouseEvent.CLICK, onClick);

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

Ответы [ 4 ]

3 голосов
/ 24 апреля 2011

Нельзя использовать точечный синтаксис для доступа к дочерним экранным объектам контейнера экранного объекта в AS3, как вы это делали в AS2. Обычно вы используете метод 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]

Другим решением является создание объекта movieclip / sprite для свойств * 109 *, overState и downState объекта, таких как:

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 голос
/ 25 октября 2014

Это очень просто.

Предположим, у меня есть кнопка, созданная из меню "Компоненты", которая называется myBtn .

myBtn.label = "Awesome text";

Выиспользуйте label вместо создания над ним текстового поля, а затем установите текст текстового поля.

Вот и все!

0 голосов
/ 24 апреля 2011

Дети SimpleButton недоступны из Actionscript; обратите внимание, что он на самом деле не расширяет DisplayObjectContainer. Класс SimpleButton является немного мутантом.

Вам нужно будет использовать контейнер MovieClip и поместить SimpleButton и метку TextField внутрь. В качестве альтернативы вы можете выкатить свою собственную кнопку из мувиклипа или использовать библиотеку компонентов. SimpleButton не предназначен для такого использования.

0 голосов
/ 24 апреля 2011

В отсутствие дополнительной информации о том, получаете ли вы ошибки и каковы они, мое первое предположение состоит в том, что система испытывает проблемы с именем переменной «Button».Уже существует класс с именем «Button», поэтому я думаю, что система думает, что вы пытаетесь вызвать метод уровня класса / var класса Button вместо обращения к переменной с именем «Button».Я бы попробовал изменить имя кнопки var на что-то уникальное.

...