Flash автоматически называет объекты на этапе "instance #" - PullRequest
0 голосов
/ 28 декабря 2010

У меня есть 2 текстовых поля TLF, уже размещенных на моей главной сцене. В окне инспектора свойств я присваиваю им имена экземпляров: "txt1" и "txt2".

Я пытаюсь создать одно событие mouseup и выяснить, в каком текстовом поле оно произошло.

Мой класс документов имеет следующий код:

package  {
import flash.display.Sprite;
import flash.events.KeyboardEvent;

public class SingleEvent extends Sprite{

    public function SingleEvent() {
        // constructor code
        root.addEventListener(KeyboardEvent.KEY_UP, textChanged,false,0,true);
    }

    private function textChanged(e:KeyboardEvent){
        trace(e.target.name);
        trace("   " + e.target);
        switch(e.target){
            case txt1:
                trace("txt1 is active");
                break;
            case txt2:
                trace("txt2 is active");
                break;
            default:
                break;
        }
    }

    }
}

Пример вывода:

instance15
   [object Sprite]
instance21
   [object Sprite]

Поскольку объекты уже находятся на сцене, я не уверен, как заставить Flash распознавать их как «txt1» и «txt2» вместо «instance #». Я попытался установить свойство .name, но оно не дало результата.

В настройках публикации я установил флажок «Автоматически объявлять экземпляры сцены».

Кроме того, возможно ли иметь одно событие изменения для нескольких компонентов слайдера? Следующее никогда не срабатывает:

root.addEventListener(SliderEvent.CHANGE, sliderChanged,false,0,true);

Спасибо за любые советы

1 Ответ

0 голосов
/ 29 декабря 2010

Кажется, что Flash Player не инициализировал TLFTextFields к моменту вызова конструктора.Попробуйте это:

package  {

    import flash.display.MovieClip;
    import flash.utils.describeType;
    import flash.events.Event;

    public class TestTLF extends MovieClip {

        private function onEnterFrame (ev:Event) : void {
            removeEventListener (Event.ENTER_FRAME, onEnterFrame);
            for (var i:int = 0; i < numChildren; i++) {
                var obj:Object = getChildAt(i);
                trace (obj.name + ":"+describeType(obj));
            }
        }

        public function TestTLF() {
            addEventListener (Event.ENTER_FRAME, onEnterFrame);
        }
    }

}

Вы обнаружите, что в дополнение к таинственно созданным дополнительным объектам "__id #" и "instance #", оба ваших TFLTextFields распознаются.

Кроме того, вашКомпоненты слайдера, очевидно, не «пузыриваются» по своим SliderEvents, что означает, что они никогда не достигают корневого объекта.Однако вы можете назначить функцию-обработчик столько раз, сколько захотите, так что вы можете просто добавить слушателей к каждому из ваших ползунков, все ссылаясь на одну и ту же функцию sliderChanged.

...