TextField в AS3 - программирование слушателя щелчка - PullRequest
0 голосов
/ 21 декабря 2009

Я хочу добавить простой фрагмент текста на сцену и добавить слушателя, чтобы он что-то делал, когда пользователь щелкает по нему.

Вот мой класс TextLink:

package some.package
{
    import flash.display.Sprite;
    import flash.external.ExternalInterface;
    import flash.text.TextField;
    import flash.text.TextFieldAutoSize;

    public class TextLink extends Sprite
    {
        public var tf:TextField = new TextField();
        public var bspr:Sprite = new Sprite();

        public function TextLink(tx:int, ty:int, tft:String):void
        {   
            tf.text = tft;
            tf.x = tx;
            tf.y = ty;
            tf.autoSize = TextFieldAutoSize.LEFT;
            bspr.addChild(tf);
            this.addChild(tf);
        }
    }
}

И вот как я это называю, вместе со слушателем:

public function test_array_of_objects():void
{     
 var tmp:TextLink = new TextLink(30, 30, "some text");
 tmp.addEventListener(MouseEvent.CLICK, roverNotify); 
 addChild(tmp);       
}

protected function roverNotify(e:Event):void
{
    ExternalInterface.call("console.log", "got a click");
}

... Но я не получаю сообщение по какой-то причине. Я успешно все импортировал. Любые мысли о том, что еще я могу попробовать?

Ответы [ 4 ]

1 голос
/ 21 декабря 2009

Является ли ваш класс TextLink диспетчером событий? Вы пытаетесь добавить прослушиватель к объекту TextLink, но прослушиватель щелчков должен быть присоединен к текстовому полю, которое вы используете внутри TextLink. TextLink должен быть каким-либо объектом DisplayObject для наследования диспетчерских возможностей.

Кроме того, конструкторы не должны указывать тип возвращаемого значения (поскольку они просто возвращают себя) - параметр: void не должен находиться там, где находится ваш конструктор TextLink.

1 голос
/ 21 декабря 2009

Проблема с нажатием на Спрайт или с запуском события? Если это первое, попробуйте добавить код ниже.

tmp.mouseChildren = false;
tmp.buttonMode = true;
1 голос
/ 21 декабря 2009

Требует ли функция TextLink в начале что-то вроде этого: var tf: Text = new Text ();

0 голосов
/ 21 декабря 2009
ExternalInterface.call("console.log", "got a click");

У вас есть функция JavaScript, определенная следующим образом ??:

function console.log(inputString) {
    //do something
}

Редактировать: не обращайте внимания на вышесказанное, забыл о Firebug.

Кроме того, TextLink не обязательно должен быть диспетчером событий, хотя вы, возможно, захотите, чтобы TextLink установил для своего свойства mouseChildre n значение false (если только вам не понадобится выбирать этот текст), что вы случайно не запускаете события в TextField и buttonMode в true.

Редактировать: Кроме того, в чем смысл?:

var bspr:Sprite = new Sprite();
bspr.addChild(tf);

Окончательное редактирование

Как насчет этого? http://code.google.com/p/fbug/issues/detail?id=1494

Да, вы правы, в FF3 консоль вводится только тогда, когда на странице javascript и использует window.console.

Если вы ставите js, который обращается к консоли до загрузки Flash, она должна работать, например,

<script>
    var triggerFirebugConsole = window.console;
</script>

Дайте нам знать, если это работает. Вряд ли мы сможем это исправить в ближайшее время.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...