Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Регистрация Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > FAQ

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 26.05.2006, 23:43
World Architect вне форума Посмотреть профиль Отправить личное сообщение для World Architect Найти все сообщения от World Architect
  № 1  
Ответить с цитированием
World Architect

Регистрация: May 2006
Сообщений: 57
Question Перекрытие событий мышки, во вложеных мувиклипах

Ситуация: нарисовано три мувика. Один внизу, два поверх первого. Ну типа двух объектов на столе. Так вот эти объекты, что на столе не получают события от мыши. Как мне сделать чтоб работало?

Старый 27.05.2006, 00:06
Nirth вне форума Посмотреть профиль Отправить личное сообщение для Nirth Посетить домашнюю страницу Nirth Найти все сообщения от Nirth
  № 2  
Ответить с цитированием
Nirth
4AM Games
 
Аватар для Nirth

блогер
Регистрация: Nov 2002
Адрес: Sofia
Сообщений: 6,264
Записей в блоге: 1
Отправить сообщение для Nirth с помощью ICQ Отправить сообщение для Nirth с помощью AIM Отправить сообщение для Nirth с помощью MSN Отправить сообщение для Nirth с помощью Yahoo Отправить сообщение для Nirth с помощью Skype™
Silin.fatal.ru->AS2->AtMouseEvent
а вообще тема обсуждалась за последний месяц на форуме 4 раза.

Код:
class AtMouseEvent{
    var po:Object,oo:Object;//ссылки на текущий и нажатый объект
    public function AtMouseEvent(){
        Mouse.addListener(this);
    }
    private function onMouseUp(){
        //если текущий объект тот же, что и нажатый, то atRelease
        //иначе atReleaseOutside
        po[po==getObject() ? "atRelease" : "atReleaseOutside"]();
        po=null;//нет нажатого
    }
    private function onMouseDown(){
        //ставим ссылку на нажатый, вызываем atPress()
        (po=getObject()).atPress();
    }
    /*private function onMouseMove(){
        var co:Object=getObject();
        //если объект сменился, то для старого atDragOut/atRollOut
        //для нового atDragOver/atRollOver в зависимости от кнопки мыши
        if(co!=oo){
            co[Key.isDown(1) ? "atDragOver" : "atRollOver"]();
            oo[Key.isDown(1) ? "atDragOut" : "atRollOut"]();
        }
        oo=co;
    }*/
    //вычисляет верхний их всех объектов под мышью (null, если никого..
    private function getObject():Object{
        if(!_root.hitTest(_xmouse,_ymouse,true))return null;
        var _array=[];//массив, куда сложим все объекты, находящиеся под мышью
        var getObj=function(o){
            for(var i in o)if(_root.hitTest.call(o[i],_xmouse,_ymouse,true)){
                _array.push(o[i]);
                if(typeof o[i]=='movieclip') getObj(o[i]);
            }
        }
        getObj(_root);//находим все объекты с которыми есть хиттест, 
        
        ////////функции для сортировки пересекающихся мувиков////////////
        var isParent=function (a,b){//является ли a потомком b ?
            while((a=a._parent)!=_root) if(a==b) return true;
            return false;
        }
        var getParentDepth=function(a,p){//глубина контейнера a в предке p
            while(a._parent!=p) a=a._parent;
            return   a.getDepth();
        }
        var getGeneric=function(a,b){//ближайший общий родитель
            while (!isParent(a,b) && b!=_root)b=b._parent;
            return b
        }
        var order=function(a,b){//функция для сортировки
            //если родство по прямой, то дети всегда выше  родителей 
            if(isParent(a,b))return -1;
            if(isParent(b,a))return  1;
            //для двоюродных меряемся предками
            var p=getGeneric(a,b);//ближайший общий родитель
            return getParentDepth(a,p) < getParentDepth(b,p);//глубины контейнеров в ближайшем общем родителе
        }
        ///////////////////////////////////////
        return _array.length==1 ? _array[0] : _array.sort(order)[0];//возвращаем единственный или верхний (сортированный)
    }
}
__________________
Я перестал переписывать, начал редактировать, еще лет 15 и я стану писателем ^_^


Последний раз редактировалось Nirth; 27.05.2006 в 08:48.
Создать новую тему Ответ Часовой пояс GMT +4, время: 12:39.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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