Опубликован: 07.11.2006 | Уровень: специалист | Доступ: платный
Лекция 5:

Компоненты

Динамическое изменение текста внутри подсказки

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

  1. В файле finalTooltipBasic.fla, добавьте новый слой scripts в главную временную диаграмму и введите следующий ActionScript.
    targ_mc.onPress = function() {
            this.tooltip.tooltipText +=
             "<font face='arial' size='10'> oh</font>";
        };

    Как видите, при выполнении кода не происходит никаких действий, поскольку текстовое поле обновляется только тогда, когда вызывается функция draw. Если бы мы знали, что происходит внутри подсказки, то поступили бы так:

    targ_mc.onPress = function(} {
            this.tooltip.tooltipText += 
            "<font face='arial' size='10'> oh</font>";
            this.tooltip.draw();
        };

    Это далеко не идеальный вариант. Мы хотим как можно проще обеспечить интерфейс компонентом, поэтому будет гораздо лучше, если при изменении tooltipText будет автоматически обновляться подсказка. Одним из новых методов во Flash MX, позволяющим реализовать это, является addProperty. addProperty позволяет добавлять параметр, который существует как обычная переменная, но при обращении к нему вызывает специальные функции для установки переменной и получения переменной - "получатель" и "установщик".

    Параметр, создаваемый с помощью выражения addProperty, называется получатель/установщик и появляется при перечислении переменных с помощью [getter/setter] после имени переменной. Установим tooltipText для подсказки в виде получателя/установщика.

  2. Прежде всего включим выражение addProperty в функцию init. Так мы укажем имя параметра, функцию, вызываемую для получения параметра, и функцию, вызываемую для установки параметра. Новое выражение выделено жирным шрифтом.
    tool tip.prototype.init = function() {
            this.bg_mc._visible = 0 ;
            this._visible = 0;
            this.setTargetIthis._parent[this._target!nstanceName]);
            // add tooitipText as a getter / setter property
            this.addProperty("tooitipText", this.getText, this.setText);
            this.draw();
        };

    Если вы когда-либо столкнетесь с проблемами при использовании addProperty, убедитесь, имеются ли и правильно ли настроены функции получения и установки. Обычно проблемы возникают, если отображаемое значение не определено при указании переменных. Другой способ проверить, все ли в порядке - это поместить все выражение addProperty в trace: если параметр определен, то будет возвращено значение "истина", в противном случае - "ложь".

  3. Теперь создадим функции getText и setText. Функция getText просто возвращает значение tooltipText.
    tooltip.prototype.getText = function() {
            return this.tooltipText;
        }
  4. Каждый раз при использовании функции установки ей передается один аргумент, указывающий новое значение, на которое устанавливается параметр. Мы берем это значение и записываем в переменную tooltipText, а затем вызываем функцию draw. Добавьте следующий ActionScript перед функцией getText.
    tooltip.prototype.setText = function(newVal) {
            this.tooltipText = newVal;
            this.draw();
        };

    Если вы изменяли код ранее в вашей временной диаграмме, вернитесь к исходному коду.

    targ_mc.onPress = function() {
            this.tooltip.tooltipText +=
              "<font face='arial' size='10'> oh</font>";
        };
  5. Сохраните фильм в файле finalTooltipbasicAddText.fla и запустите его. Вы увидите, что подсказка обновляется каждый раз при щелчке мыши.

    Это еще не настоящее приложение, но мы теперь знакомы с некоторыми важными концепциями. Теперь добавим параметр активности.

Добавление параметра активности

Мы будем использовать такой же подход для добавления параметра активности.

  • Добавьте следующий выделенный код в ActionScript для компонента tooltip.
    tooltip.prototype.init = function() {
        this.bg_mc._visible = 0;
        this._visible = 0;
        this.setTarget(this._parent[this._targetInstanceName]);
        this.addProperty("tooltipText", this.getText, this.setText);
        // add ttEnabled as a getter / setter property
        this.addProperty("ttEnabled", this.getEnabled, this.setEnabled) ;
        this.draw();
    };
  • Добавьте методы получения и установки. Добавьте функции setEnabled и getEnabled под функциями setText и getText.
    tooltip.prototype.setEnabled = function(newval) {
            this.ttEnabled = newval;
            if (!this.ttEnabled) {
                this.clearTooltip();
            }
        };
        tooltip.prototype.getEnabled = function() {
            return this.ttenabled;
        };

    Итак, если ttEnabled установлен на значение "ложь", мы устанавливаем переменную и затем удаляем подсказку, если она уже отображена, с помощью вызова метода clearTooltip.

  • Теперь нам нужно добавить проверку активности всплывающей подсказки в функции displayTooltip ; соответствующий код выделен жирным шрифтом.
    tooltip.prototype.displayTooltip = function() {
            clearlnterval(this.wait);
            // check if tooltip enabled before displaying
            if (this.ttEnabled) {
                this._visible = 1;
                this.onMouseMove = this.putMeByMouse;
                this.putMeByMouse();
            }
        };
  • Для проверки результатов добавим некоторый код в главную временную диаграмму, чтобы переключать состояние активности нашей подсказки.
    targ_mc.onPress = function() {
            this.tooltip.ttEnabled = !this.tooltip.ttEnabled;
        };
  • Сохраните фильм в файле finalTooltipbasicAddEnabled.fla и запустите его. Если щелкнуть мышью во время отображения подсказки, она исчезнет и не появится, пока вы снова не переместите указатель мыши на место над фильмом.
Игорь Хан
Игорь Хан

у меня аналогичная ситуация. Однако, если взять пример из приложения (ball_motion_04_click for trial.fla) то след остается. при этом заметил, что в моем проекте в поле "One item in library" виден кружок, в то время как в приложенном примере такого кружка нет.

Вопрос знатокам, что не так?

Александр Коргапольцев
Александр Коргапольцев

объект созданый мной упорно не желает оставлять след(единственное что добился, так это то что шарик резво гоняется за курсором) функция duplicateMovieClip остаётся не активной, т.е. следа от объекта не остаётся, но если я тоже самый код вбиваю в учебный файл всё работает, не могу понять где я ошибаюсь и почему в документе созданном заново, не работает код начиная от функции duplicateMovieClip? 

Тамара Ионова
Тамара Ионова
Россия, Нижний Новгород, НГПУ, 2009
Магомед Алисултанов
Магомед Алисултанов
Россия, Волгоград, лицей 2