Форум 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)
-   -   Почему не работает вложенный мувик? (http://www.flasher.ru/forum/showthread.php?t=124927)

zelik 12.05.2009 19:23

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

Код AS1/AS2:

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

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

Код AS1/AS2:

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

Проблема с drag-and-drop
 
Всем доброго дня!

По следуещей ссылке уже пытался найти помощь, но, видимо, проблема осталась не понятой..
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 в точности:

Код AS1/AS2:

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

Немного не по теме, но...
Код AS1/AS2:

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

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

zelik 13.05.2009 20:38

Если не сложно, то поясните, в чем странность!

mooncar 13.05.2009 20:46

А что с кодом не так?
У меня есть, например, такой кусок, использую для всплывающих подсказок, здесь тоже убивается ненужная ф-я:
Код AS1/AS2:

        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 минуты
Убивается же не сам метод, а определяемая функция.


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

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