PDA

Просмотр полной версии : Есть ли во флеше полноценный eval?


MyXus
19.05.2006, 00:52
Никак не могу найти функцию, которая могла бы реализовать подобную конструкцию:
var str = "_root.attachMovie('a', 'b', _root.getNextHighestDepth())";
eval(str);

Nirth
19.05.2006, 00:53
Ознакомьтесь с правилами, и отредактируйте свой пост

MyXus
19.05.2006, 00:56
какая скорость реагирования..

Nirth
19.05.2006, 01:04
бешенная правда=)?
насколько я знаю нет, покрайней мере у меня не получалось запускать так функции, в JS можно, но там язык интерпретируемый.

как обходной маневр можно так

var params:Array=new Array("a","b");
var method:Function = _root.attachMovie;
method.apply(_root,params.concat(new Array(_root.getNextHighestDepth()));

MyXus
19.05.2006, 01:17
Ну.. это для конкретного случая.
я задумал реализовать такую конструкцию:
поскольку в проекте, который я сейчас делаю, есть огромное количество взаимноинтегрированных программно-анимированных объектов, я решил не париться больше с выведением из объектов классов хвостов от intervalID, а сделать некий внешний конвеер.
Конвеер - программный таймлайн, в каждый кадр которого каждый объект каждого класса может встроить указатель на функцию (то есть параметр для eval), которую он хочет выполнить в определенный момент.
Тогда setInterval в проекте будет только один - этот.

Nirth
19.05.2006, 01:34
ну вобщем то всегда ведь можно передавать вместо 1 параметра(строки) два параметра, метод, и массив параметров? если это критично, то не знаю.
где то был подобный топик, только боюсь найти его будет сложно

MyXus
19.05.2006, 02:20
это да, но ведь var method:Function = _root.attachMovie; не всегда _root.attachMovie. Может это myclass_obj.myfunc();..
как тогда?

Nirth
19.05.2006, 02:34
ну а кто запрещает в каждом кадре писать

method = mySound.attachSound
params = new Array(some stuff here);
//слейдующий кадр
method = someClassInstance.someMethod;
params = new Array(some stuff here);
//потом
method = _root.attachMovie;
params = new Array(some stuff here);

Хотя я бы переделал всю архетиктуру как нибудь без кадров вообще, но если работа с дизайнером наверное проблематично

MyXus
19.05.2006, 14:28
Да. всё понял
Кадров действительно нет
Но есть программный таймлайн (setInerval).
Thx. попробую )

MyXus
14.06.2006, 20:40
Чтот я не могу разобратьсяvar param = 'aaa';
var method:Function = trace;
method.apply(param);
где ошибка?

iNils
14.06.2006, 20:46
Это имеет отношение к теме топика?:)

MyXus
14.06.2006, 20:57
самое прямое..
Если угодно, могу конкретизировать..

смысл всего топика - как получить указатель на функцию и выполнить её с любыми параметрами.

ЗЫ. разобрался.trace.apply(null, ['aaaa']);
первый параметр apply - объект, чья функция вызывается. Если объекта нет, то null

etc
14.06.2006, 21:10
А что ты хочешь сделать?

upd: Скоростные. И спросить не успеваешь...

MyXus
14.06.2006, 21:16
Хочешь класс дам посмотреть? я написал уже :-)

Тема такая. Мне нужно сделать асинхронную анимацию. У моего начальника большая любовь к анимации с ускорением и инерцией :-) Поэтому, чтобы не морочиться каждый раз я решил сделать класс, который двигает указанный объект по контрольным точкам. В любые моменты времени между одной и другой контрольной точками может вызываться любой метод (начало анимации другого объекта или любой другой обработчик). Вот, вроде написал.

iNils
14.06.2006, 21:17
trace глобальная функция, зачем ты ее таким извращенным способом вызываешь?

etc
14.06.2006, 21:17
Хочешь класс дам посмотреть? я написал уже :-)
Спасибо, не надо. Я ещё жить хочу.

MyXus
14.06.2006, 21:24
trace глобальная функция, зачем ты ее таким извращенным способом вызываешь?да чисто для теста. самая простая функция, на чем ж еще тестить.