Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Объект вложен в кнопку, синтаксис пути (http://www.flasher.ru/forum/showthread.php?t=137172)

Haiak 06.03.2010 02:34

Объект вложен в кнопку, синтаксис пути
 
Здравствуйте, с AS 3.0 знаком не очень хорошо, возможно глупый вопрос, но все же.
Ситуация 1: Есть некий movie clip в виде квадрата, в него вложен текст (Dynamic Text). Я пишу строчку кода:
Код AS3:

mcKvadrat.TextovoePole.text = peremennaya

Запускаю флеш, появляется квадрат, в нем значение переменной, все без ошибок.
Ситуация 2:
Теперь вместо мувиклипа у меня кнопка, которая появлятся только когда курсор мыши оказывается над ней, то есть у нее в кадре "Up" ничего нет.
Пишу код:
Код AS3:

btnKnopka.TextovoePole.text = peremennaya

Появляется вот эта ошибка:

1119: Access of possibly undefined property TextovoePole through a reference with static type flash.display:SimpleButton.

Я догадываюсь, нужно указать что текст находится во втором и третьем кадрах "over" и "Down", но не знаю как это сделать.
Подскажите пожалуйста, заранее спасибо.
П. С. Гуглил, читал хелп и книжки, ничего не нашел =)

UPD Видимо с кнопкой такое не прокатит, придется делать мувиклипом.

Xero201 06.03.2010 03:07

Да, я тоже где-то читал что с кнопкой такого не пракатывает

Obi 06.03.2010 14:08

SimpleButton — не динамический класс, а значит динамическое добавление новых свойств невозможно.
К тому-же, он не наследуется от класса DisplayObjectContainer, следовательно вложенных DisplayObject'ов у него быть не может.
Вообще у класса SimpleButton есть 4 дисплейобжекта, которые служат различными состояниями кнопки. Теоретически, если обратиться к каждому из них, и взять у них ребенка с именем TextovoePole, если таковой ребенок там есть, он возьмется :) Практически — в созданной вручную кнопке во Flash IDE мне не удалось обратиться к текстовому полю по заданному ему имени, которое я также добавил вручную на таймлайн.

UPD:

btn — добавленная вручную кнопка с именем 'btn' (я специально не использовал правильный getChildByName).
B btn в каждом кадре добавлен dynamic textfield с именем 'tf' и нарисовано по шейпу.


Код AS3:

if(btn.upState is DisplayObjectContainer) {
        var state:DisplayObjectContainer = (btn.upState as DisplayObjectContainer);
        var num:int = state.numChildren;
        trace('upstate has', num, 'childs');
        for(var i:int = 0; i < num; i++) {
                var child:DisplayObject = state.getChildAt(i);
                trace('button\'s upState has child', child, 'with name', child.name);
        }
}

Получаем объекты Shape и TextField, но с именами instance1 и instanse2.
Кто из гуру расскажет, что произошло с именами?
Мое единственное предположение заключается в том, что Flash IDE перефигачила вручную нарисованную кнопку в SimpleButton на свой лад.


UPD 2:

Код AS3:

if(btn.upState is DisplayObjectContainer) {
        var state:DisplayObjectContainer = btn.upState as DisplayObjectContainer;
        checkChilds(state);
 
        var newTf:TextField = new TextField();
        newTf.autoSize = 'left';
        newTf.name = 'new_textfield';
        newTf.text = 'hello ide';
        state.addChild(newTf);
 
        checkChilds(state);
}
 
function checkChilds(state:DisplayObjectContainer):void {
        var num:int = state.numChildren;
        trace('state has', num, 'childs');
        for(var i:int = 0; i < num; i++) {
                var child:DisplayObject = state.getChildAt(i);
                trace('state has child', child, 'with name', child.name);
        }
}

У програмно добавленного текстфилда имя, естественно, в порядке.

Wolsh 07.03.2010 01:20

SimpleButton такой simple...
История повторяется.. Что во времена ас1-ас2 объясняли, что буттон "для дизайнеров", что сейчас. Хотите правильную кнопку - пишите сами, невелик труд. Пытаться сделать слона наклеиванием на муху пенопласта - неблагодарное занятие. Симпл нужен, когда надо быстро сляпать какой-то тестовый образец для демонстрации/проверки логики. Никакого другого смысла в нем нет, не тратьте время - лучше используйте его на написание своей приличной расширяемой кнопки из спрайта, которая будет контейнером и вообще позволит делать любые фичи - дизабленные или нажатые состояния, лейблы, иконки и плавные переходы или подсветку.


Часовой пояс GMT +4, время: 07:36.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.