Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   onPress не вызывает функцию (http://www.flasher.ru/forum/showthread.php?t=110130)

vitalian 27.03.2008 16:41

onPress не вызывает функцию
 
Привет уважаемому 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

Цитата:

Анонимные функции лучше избегать.
Эм... Почему?


Часовой пояс GMT +4, время: 08:40.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.