Регистрация: 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
|