PDA

Просмотр полной версии : Две схожих функции ведут себя по разному при отслеживании OnRelease


Shinoby
10.04.2008, 14:12
Я вот что то не пойму. Вот функция:

function LoadAvatar(MyURL, MyX, MyY){
var InitX = 50;
var InitY = 50;
layer_index2++;
//AddText(MyURL,0,25)
clip2 = this.createEmptyMovieClip("mc2", layer_index2);
clip2.createEmptyMovieClip("content2", 0);
clip2.init();
ml2 = new MovieClipLoader();
ml2.addListener(mc2);
ml2.loadClip(MyURL, clip2.content2);
clip2._x = InitX+(MyX*step_right);
clip2._y = InitY+(MyY*next_line);
//var my_color = new Color(clip);
//my_color.setRGB(MyColor);
clip2.onPress = Dummy2;
this.clip2.onRelease = MainCharLink;
}

function MainCharLink(){
getURL("http:...", "_blank");
}


Работает по клику. Все ОК.

А вот еще функция, она отрабатывает СРАЗУ при создании объектов и не реагирует на клики потом. В чём прикол?


function AddText2(MyText, MyX, MyY) {
var InitX = 50;
var InitY = 50;
layer_index++
_root.createEmptyMovieClip("layer"+layer_index, layer_inde);
var b = _root["layer"+layer_index];
b.createTextField( "tf", 200, InitX+(MyX*step_right), InitY+(MyY*next_line), 500, 20);

with (b.tf) {
selectable = false;
text = " "+ MyText;
}
b.onRelease = ShowMenu(b.tf.text);
}

function ShowMenu(aaa){
trace(aaa);
}

iNils
10.04.2008, 14:30
В первом коде, вы даете обработчикам событий ссылки на функции. А во втором вызываете функции и присваивате обаботчика полученный результат.

Если вы хотите при этом передавать аргументы, то вам надо пользоваться расширенным делигатом (http://www.flasher.ru/forum/showpost.php?p=634563&postcount=2).

Shinoby
10.04.2008, 15:08
Подцепить то я класс подцепил. Во 2ом AS работает.

Все супер. Спасибо. Разобрался.