Показать сообщение отдельно
Старый 11.12.2001, 15:31
vol вне форума Посмотреть профиль Отправить личное сообщение для vol Найти все сообщения от vol
  № 8  
vol

Регистрация: Jan 2000
Сообщений: 216
По умолчанию Ну, сделать-то можно. Да захочешь ли?

Сделать можно все. Можно и это.

Пишем для начала жесткую функцию

function doCommand(command){
clp="this.mc";
param="_x";
zn=500;
eval(clp)[param]=zn;
}


Проверяем:

docommand(command);
Работает.

Стал быть, остается проанализировать входную строку и выделить из нее имя клипа, наименование параметра, действие и значение ( в примере это все было зашито жестко).

1.Имя клипа. Хорошо, если в руте. Если где-то внутри? Если mc.mc1.mc2._x=100? Надо анализировать. Допустим, справились.
2.Параметр. _x, _y,_rotation и черт его знает, что еще. Ну, как правило, начинается с подчеркивания. Значит, все, что до него было - имя. mc.mc1.mc2. - имя (надо еще последнюю точку убрать).Все, что после и до действия - одного из довольно ограниченного набора символов - параметр.
3.Действие. Вычленяешь из строки оператор - это м.б. =,+.-,++.--.>>, далее - везде.
4.значение. Все, что от строки останется.

Делаешь оператор сравнения по выбранной подстроке действия и переписываешь самое последнее выражение в функции - напр,
if (deistvie=="="){eval(clp)[param]=zn}
else if deistvie=="*="){eval(clp)[param]*=zn}
else и т.д., и т.п.

Всего-то делов - перебрать все возможные варианты.
И все это роскошество вместо одного единственного варианта напрямую. Но - дерзай, этот путь работать будет. Такие вот бананы!
__________________
Ударим флэшем по бездорожью и разгильдяйству!

VOL