PDA

Просмотр полной версии : onPress не вызывает функцию


vitalian
27.03.2008, 16:41
Привет уважаемому All'у!

Flash-MX 2004.
Не серчайте, вопрос примитивный, не знаю как его через поиск искать.

my_mc.onPress = function()
{
trace("test");
}
- это работает.

function test()
{
trace("test");
}

my_mc.onPress = test();

- а это вызывает trace сразу после запуска и мувик больше на клики не реагирует.
Что за беда? а если функция большая, и ее надо вызывать с разными параметрами для кучи разных мувиков - для каждого копипастить код заново?

konstantin.noir
27.03.2008, 16:44
Нужно писать
my_mc.onPress = test;
без скобок, иначе происходит вызов функции test() сразу

vitalian
27.03.2008, 16:46
О!
Гран-мерси)

...хотя подождите - а как тогда функции параметры передавать?

Molecula
27.03.2008, 18:42
Через
Delegate
Через обычный передать можно так:
import mx.utils.Delegate;
function a () {
trace (arguments.caller.id);
trace (arguments.caller.trash);
}
var f:Function = Delegate.create (this, a);
f.id = 'Hello';
f.trash = mc._name;
mc.onPress = f;
Но это не удобно.

iNils, если отпишет - свой Делегат предложит :D
Я использую Proxy - http://www.person13.com/articles/proxy/Proxy.htm
Там третьим и т.д. параметром можно передавать функции, что надо:
myDelegate(this, a, param1, param2...)
Чем будет пользоваться Вы - решать Вам.

vitalian
28.03.2008, 02:37
у-угу...
но разве Delegate - это AS2.0? Мука читаю, про такого зверя пока ничего не встречал. Хелп этого слова тоже не знает, компилятор ругается: "The class 'mx.utils.Delegate' could not be loaded."

etc
28.03.2008, 10:44
А у вас и не AS2, судя по вашему коду.

crazyone
28.03.2008, 12:38
Если принципиально делать это во Flash-MX 2004 (четырехлетней давности софт, между прочим), то пишите что-то вроде
my_mc.onPress=function(){
test(params);
}

CrazyFlasher
28.03.2008, 12:47
Если принципиально делать это во Flash-MX 2004 (четырехлетней давности софт, между прочим), то пишите что-то вроде
Delegate прекрасно компилится под 7-ку...возможно у вас потерялась либа mx.utils...скачайте где-нибудь

Molecula
28.03.2008, 12:54
Анонимные функции лучше избегать.
Ну раз у Вас 6-ка, то можно делать так, не одной строкой передавать параметр:
function a() {
var p2 = this._name;
b(p1, p2);
}
function b(o, o2){
trace(o);
trace(o2);
}
p1 = 'Hello';
mc.onPress = a;

crazyone
28.03.2008, 13:02
Анонимные функции лучше избегать.

Эм... Почему?

vitalian
30.03.2008, 15:56
Molecula, crazyone
Мерси, вроде въехал.

CrazyFlasher
Это то, что называется mx.utils.Delegate.as?
Видимо, у меня неправильный Флеш.
Поиск на винте этого файла не находит, в Яндексе и локалке, как ни странно, тоже...