PDA

Просмотр полной версии : Почему не работает вложенный мувик?


zelik
12.05.2009, 19:23
Здравствуйте.
Проблема в следующем:
Есть мувик mc (копилка), при нажатии на который происходит его масштабирование

mc.onRelease = function() {
this.onEnterFrame = function() {
//масштабирование mc
...
} else {
delete this.onEnterFrame;
}
};

в мувик mc (копилка) вложены мувики mc_1,mc_2,mc_m (копилка_часть1, копилка_часть2, монета).
Реализована возможность помещения монеты в копилку

myDragger(mc_m)
function myDragger(mc:MovieClip) {
mc.onPress = function() {
this.startDrag(false);
mc.onMouseMove = function() {
updateAfterEvent();
};
};
mc.onMouseUp = function() {
if (//монета в нужном месте) {
{
...
mc.onEnterFrame = function() {
//перемещение монеты в копилку
} else {
delete mc.onEnterFrame;
}
};

};
} else {
//перемещение монеты в начальную позицию
...
}
delete mc.onMouseMove;
stopDrag();
};
}

"Помещение монеты в копилку" работает (в отдельности). Но как только производится предворительное масштабирование мувика mc, вложенные в него мувики (Drag and Drop) не работают.

Подскажите, пожалуйста, в чем ошибка и как ее устранить.
Спасибо!

zelik
13.05.2009, 14:40
Всем доброго дня!

По следуещей ссылке уже пытался найти помощь, но, видимо, проблема осталась не понятой..
http://www.flasher.ru/forum/showthread.php?t=124927

Попробую изложить по-другому.

Есть мувик mc, в который вложены мувики mc1,mc2. Для mc1,mc2 реализован drag-and-drop. Все работает.

Если для mc прописываю onRelease(), то drag-and-drop перестает работать.

Пожалуйста, обясните, в чем проблема и как ее устанить.

Заранее большое спасибо!

Merf
13.05.2009, 15:08
У меня была такая же проблема, мне обьяснили что если на родительском мувике есть код, то код дочерних работать не будет, попробуйте обойтись без этого, например создать отдельный мувик полностью прозрачный над теми двумя и при нажатии и удержании на нем курсора двигались те два.

zelik
13.05.2009, 15:33
Спасибо!
Интересно, но хотелось бы понять принцип...
Это же часто встречающаяся ситуация.
Неужели все используют дополнительный прозрачный мувик?

mooncar
13.05.2009, 17:32
Создайте слушатель и проверяйте при onMouseDown, выполняется ли hitTest у mc с позицией мыши. Тогда никакие onRelease не нужны.

Добавлено через 8 минут
Можно и на отпускание кнопки - тогда эмулируется поведение как у onRelease в точности:

var mouseListenerOn:Object = new Object(); //слушаем попадание
mouseListenerOn.onMouseUp= function() {
if (mc.hitTest(_root._xmouse, _root._ymouse)) {
//код, что делать при "нажатии" на mc
}
};
Mouse.addListener(mouseListenerOn);

Добавлено через 9 минут
И когда надо, убиваем слушатель.

zelik
13.05.2009, 18:19
Спасибо, mooncar. Так тоже работает.
А есть возможноть изменить курсор при наведении?
А когда надо убивать слушатель при том, что mc может вызываться неоднократно?

mooncar
13.05.2009, 19:02
Ответ вынес в новую тему.

Psycho Tiger
13.05.2009, 20:26
Немного не по теме, но...
mc.onRelease = function() {
this.onEnterFrame = function() {
//масштабирование mc
...
} else {
delete this.onEnterFrame;
}
};

мне одному этот код кажется странным?

zelik
13.05.2009, 20:38
Если не сложно, то поясните, в чем странность!

mooncar
13.05.2009, 20:46
А что с кодом не так?
У меня есть, например, такой кусок, использую для всплывающих подсказок, здесь тоже убивается ненужная ф-я:
targetmc.onRollOver = function(){

this.onMouseMove = function(){
this["popup"]._visible = true;
this["popup"]._x = _xmouse;
this["popup"]._y = _ymouse - 30;
};
};
targetmc.onRollOut = function(){
this["popup"]._visible = false;
delete this.onMouseMove;
};

Добавлено через 4 минуты
Убивается же не сам метод, а определяемая функция.

KiL33
13.05.2009, 20:54
Psycho Tiger, мало ли что под тремя точками завуалировано..))