Показать сообщение отдельно
Старый 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.