PDA

Просмотр полной версии : конфликт обработчиков в клипах


EWG
02.09.2005, 12:59
день добрый.

описываю ситуацию... создется пустой клип (sc1), в него пихается еще два (sc2 и sc3), один, естественно над другим... в тот что ниже (sc2) - пихается изображение, в тот что выше (sc3) - расставляются лэйблы через создание, опять-таки маленьких клипов(sc3_1,2,3,...), содержащих нарисованную точку и текстовое поле... почему именно так - чтобы изначальный слой потом можно было "таскать" и, соответственно, таскалось и изображение и лэйблы... все это - сделано и работает... но вот суть в том что обработчик "таскания" повешен на sc2, что логично... а в sc3 где создаются лэйблы, мне надо сделать чтобы надписи тоже были интерактивными, чтобы с них getURL-ом вызывлись функции перенаправляющие... так вот этого добиться не могу, не срабатывают на этих sc3_x никакие события...

подскажите, куда копнуть, ежели не туманно объяснил...

EWG
02.09.2005, 13:53
поэкспериментировал, поставил html-ссылку в текст, не пашет... убрал текст-поле из sc3_x в _root - заработало... то есть ссылки не будут работать если текстовое поле не в руте ?...

Nео
02.09.2005, 13:57
все должно работать, исходник выложи...

EWG
02.09.2005, 14:19
как-то так... для цитирования убирал лишнее, может убрал чего важное... посмотрите...


initialize('primary');


function initialize(step){
switch(step){
case 'primary':
_root.createEmptyMovieClip("Map2",49);
map = _root.Map2;
map.createEmptyMovieClip("surface",51);
map.surface.createEmptyMovieClip("container",53);
map.createEmptyMovieClip("titles",52);

loadMap(map.surface.container, '1.jpg');
break;

case 'after_map_load':
map.onPress = function(){
setPoint(id, title, Cursor._x, Cursor._y); // _root.Cursor - собственный курсор
}
break;
}
}


function loadMap(mc, swf){
var my_mcl = new MovieClipLoader();
myListener = new Object();
myListener.onLoadComplete = function (target_mc){
mainInterval = setInterval(initialize, 1000, 'after_map_load');
}
my_mcl.addListener(myListener);
my_mcl.loadClip(swf, mc);
}

points_id = 0;
point_size = 10;

function setPoint(id, title, crsx, crsy){

map.titles.createEmptyMovieClip("title_"+id,100+points_id);
obj = eval('_root.Map2.titles.title_'+id);
points_id = points_id+2;
obj._x = crsx;
obj._y = crsy;
crsx = 0;
crsy = 0;

obj.createTextField("str",200+points_id,0,0,300,20);
with(obj.str) {

listTxtStyle = new TextFormat();
with (listTxtStyle) {
font = "Verdana";
size = 13;
color = 0x000000;
}

selectable= false;
_highquality = 1;
html = true;
hid = id;
htmlText = "<a href='javascript:gotoHotel("+id+")'>"+title+"</a>";

setTextFormat(listTxtStyle);
}

obj.onPress = function(){
trace(this);
}
obj.onRelease = obj.onReleaseOutside = function(){
}

}


stop();

Nео
02.09.2005, 15:04
и че,
obj.onPress = function(){
trace(this);
}
не работает?

EWG
02.09.2005, 15:06
нифига...
может потому что на surface поставлен свой онпресс и в нем, собственно вызывается setPoint()?

Nео
02.09.2005, 15:10
ну после того, как запустили setPoint() обработчики должны работать, мы ж их не удаляли... а _root.Map2.titles.title_'+id реально существует, ты проверял?

EWG
02.09.2005, 15:14
да, потому что если перенести текст в рут, то джаваскриптовская функция вызывается с правильным id...

Nео
02.09.2005, 15:22
не пойму, где ты id берешь!
у мення trace(obj);
выводит: _level0.Map2.titles.title_undefined

EWG
02.09.2005, 15:40
id я передаю во флэш из html...
поставь в тесте просто в лоб и id и title чемунть равный, в начале...

Nео
02.09.2005, 15:57
самое интересное, чтопри наведении на текстовое поле курсор меняет форму на "руку" а обработчики не пашут!!!

Update:
Вернее всеравно работает map.onPress вместо Obj.onPress

Nео
02.09.2005, 16:30
пока вижу выход:
вместо

Obj.onPress = function(){
...................
}

писать
if (obj.hitTest(_root._xmouse, _root._ymouse, true)) {
trace(this.obj);
}

EWG
02.09.2005, 16:35
ок, буду пробовать...

спасибо за помощь ;)...