Просмотр полной версии : конфликт обработчиков в клипах
день добрый.
описываю ситуацию... создется пустой клип (sc1), в него пихается еще два (sc2 и sc3), один, естественно над другим... в тот что ниже (sc2) - пихается изображение, в тот что выше (sc3) - расставляются лэйблы через создание, опять-таки маленьких клипов(sc3_1,2,3,...), содержащих нарисованную точку и текстовое поле... почему именно так - чтобы изначальный слой потом можно было "таскать" и, соответственно, таскалось и изображение и лэйблы... все это - сделано и работает... но вот суть в том что обработчик "таскания" повешен на sc2, что логично... а в sc3 где создаются лэйблы, мне надо сделать чтобы надписи тоже были интерактивными, чтобы с них getURL-ом вызывлись функции перенаправляющие... так вот этого добиться не могу, не срабатывают на этих sc3_x никакие события...
подскажите, куда копнуть, ежели не туманно объяснил...
поэкспериментировал, поставил html-ссылку в текст, не пашет... убрал текст-поле из sc3_x в _root - заработало... то есть ссылки не будут работать если текстовое поле не в руте ?...
все должно работать, исходник выложи...
как-то так... для цитирования убирал лишнее, может убрал чего важное... посмотрите...
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();
и че,
obj.onPress = function(){
trace(this);
}
не работает?
нифига...
может потому что на surface поставлен свой онпресс и в нем, собственно вызывается setPoint()?
ну после того, как запустили setPoint() обработчики должны работать, мы ж их не удаляли... а _root.Map2.titles.title_'+id реально существует, ты проверял?
да, потому что если перенести текст в рут, то джаваскриптовская функция вызывается с правильным id...
не пойму, где ты id берешь!
у мення trace(obj);
выводит: _level0.Map2.titles.title_undefined
id я передаю во флэш из html...
поставь в тесте просто в лоб и id и title чемунть равный, в начале...
самое интересное, чтопри наведении на текстовое поле курсор меняет форму на "руку" а обработчики не пашут!!!
Update:
Вернее всеравно работает map.onPress вместо Obj.onPress
пока вижу выход:
вместо
Obj.onPress = function(){
...................
}
писать
if (obj.hitTest(_root._xmouse, _root._ymouse, true)) {
trace(this.obj);
}
ок, буду пробовать...
спасибо за помощь ;)...
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.