Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 27.07.2006, 00:53
xintrea вне форума Посмотреть профиль Отправить личное сообщение для xintrea Посетить домашнюю страницу xintrea Найти все сообщения от xintrea
  № 1  
Ответить с цитированием
xintrea
 
Аватар для xintrea

Регистрация: Mar 2002
Адрес: https://webhamster.ru
Сообщений: 107
По умолчанию Установка свойства 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), но она ругается что нет такого свойства.
__________________
Со всяческими пожеланиями, Xintrea.
https://webhamster.ru

Старый 27.07.2006, 01:14
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 2  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
читаем про 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


Последний раз редактировалось silin; 27.07.2006 в 01:20.
Старый 27.07.2006, 01:31
xintrea вне форума Посмотреть профиль Отправить личное сообщение для xintrea Посетить домашнюю страницу xintrea Найти все сообщения от xintrea
  № 3  
Ответить с цитированием
xintrea
 
Аватар для xintrea

Регистрация: Mar 2002
Адрес: https://webhamster.ru
Сообщений: 107
Какой оперативный ответ

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

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

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

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


Это меня PHP да JavaScript попутали. В них как раз eval() может выполнять любое выражение.
__________________
Со всяческими пожеланиями, Xintrea.
https://webhamster.ru


Последний раз редактировалось xintrea; 27.07.2006 в 01:34.
Старый 27.07.2006, 02:42
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 4  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Забудь про setProperty, пока не поздно.

Старый 27.07.2006, 17:54
xintrea вне форума Посмотреть профиль Отправить личное сообщение для xintrea Посетить домашнюю страницу xintrea Найти все сообщения от xintrea
  № 5  
Ответить с цитированием
xintrea
 
Аватар для xintrea

Регистрация: Mar 2002
Адрес: https://webhamster.ru
Сообщений: 107
Я во флеше не силен.. А почему надо забыть о setProperty()?

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

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

Старый 27.07.2006, 18:31
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 6  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
дело вкуса канеш.. , это по поводу "запись через setProperty() гораздо читабельнее",
а насчет "мы увидим загнивание технологии" : это ты погорячился, это врядли..
к слову, Adobe® Flex™ 2 Language Reference (ActionScript 2.0 Migration): setProperty() - Removed..

Создать новую тему Ответ Часовой пояс GMT +4, время: 14:26.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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