Просмотр полной версии : 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."
А у вас и не 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?
Видимо, у меня неправильный Флеш.
Поиск на винте этого файла не находит, в Яндексе и локалке, как ни странно, тоже...
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.