Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Установка свойства movieClip: прямая команда работает, а через eval() - нет (http://www.flasher.ru/forum/showthread.php?t=83065)

xintrea 27.07.2006 00:53

Установка свойства movieClip: прямая команда работает, а через eval() - нет
 
Здравствуйте!

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

Что я имею в виду. Есть 99 копий мувиклипа, созданых через duplicateMovieClip(). Копии имеют имена cell01 ... cell99, и находятся внутри клипа tab.

В библиотеке базовый клип cell - это обычный клип, у которого если щелкнуть правой кнопкой мышки и выбрать пункт "Component Definition", задан один дополнительный параметр cell_state так:

Name - "Текущее значение"
Variable - cell_state
Value - 0
Type - Number


И вот в чем проблемма. Я не могу установить значение cell_state для нужной мне копии объекта cell. Точнее, я могу сделать это прямой командой, но не могу установить свойство для программно заданой ячейки.

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

Код:

// Вариант 1 (прямой код) - работает
tab.cell44.cell_state=1;

// Вариант 2 (через eval) - не работает
x=4;
y=4;
cmnd="tab.cell"+x+y+".cell_state=1;";
trace(cmnd); // Сконструирована команда "tab.cell44.cell_state=1;"
eval(cmnd);


"Не работает" - это значит код молча выполняется без ошибок, но изменение свойства мувика не происходит.


Вот. Кто мне может рассказать, как поменять свойство cell_state для произвольного мувика? Может быть, можно не через eval(), а как-то по-другому?


ЗЫЖ Возможно это важно. Пробовал конструкцию setProperty("tab.cell"+x+y,cell_state,1), но она ругается что нет такого свойства.

silin 27.07.2006 01:14

читаем про eval: Accesses variables, properties, objects, or movie clips by name - ни слова про исполнение кода..
пробуем
Код:

tab.cell44.cell_state=1;
trace(tab.cell44.cell_state);//1
///////////////
x=4;
y=4;
cmnd="tab.cell"+x+y+".cell_state";
eval(cmnd)=2;
trace(tab.cell44.cell_state);//2

да и не забудь в установках поставить 5ую версию :)
зы: как поменять свойство в теперяшних версиях:
Код:

tab["cell"+x+y].cell_state=3;
trace(tab.cell44.cell_state);//3


xintrea 27.07.2006 01:31

Какой оперативный ответ :)

Да, так и есть. В общем, надо конструировать не команду, а текст ссылки на объект. Eval() возьмет текст ссылки, а вернет саму ссылку.

setProperty(this.player5,_visible,1); - работает

setProperty("this.player5",_visible,1); - работать не будет

setProperty(eval("this.player5"),_visible,1); - работает


Это меня PHP да JavaScript попутали. В них как раз eval() может выполнять любое выражение.

etc 27.07.2006 02:42

Забудь про setProperty, пока не поздно.

xintrea 27.07.2006 17:54

Я во флеше не силен.. А почему надо забыть о setProperty()?

Вроде как это универсальный метод изменения свойств объектов. Пусть он и устареет, но его поддержка для совместимости должна остаться в будующих версиях флеша. И запись через setProperty() гораздо читабельнее, чем дикие конструкции с квадратными скобками []. Думаю, инженеры макромедии хорошо представляют себе что такое эргономика, коль сделали такой продукт как флеш. А если они знают что такое эргономика, они никогда не перекособочат флеш в нелогичную или неудобную пользователю сторону, будь то интерфейс или требования к коду.

А если перекособочат - мы увидим загнивание технологии, пусть возможностей там будет туева хуча, AS3, мультиплатформеность редактора и прямой OpenGL рендеринг. :)

silin 27.07.2006 18:31

дело вкуса канеш.. , это по поводу "запись через setProperty() гораздо читабельнее",
а насчет "мы увидим загнивание технологии" : это ты погорячился, это врядли..:)
к слову, Adobe® Flex™ 2 Language Reference (ActionScript 2.0 Migration): setProperty() - Removed..


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

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