Как сделать привязку в as3 как во flash? - PullRequest
0 голосов
/ 22 февраля 2012

Есть много видеороликов на сцене?Теперь я хочу выровнять их с помощью перетаскивания внутри фрагментов ролика. Я хочу, чтобы при размещении выбранного фрагмента ролика под этим фрагментом клипа появлялась вертикальная линия выравнивания, как показано на прикрепленном изображении.

Вот изображение:

enter image description here

Вот код:

package  
{
    import flash.display.DisplayObject;
    import flash.display.MovieClip;
    import flash.events.MouseEvent;

    public class Main extends MovieClip
    {
        private var obj:Rectangle1 = new Rectangle1();
        private var obj1:Rectangle1 = new Rectangle1();
        private var obj2:Rectangle1 = new Rectangle1();
        private var obj3:Rectangle1=new Rectangle1();
        public var Obj_Arr:Array = [];
        private var p:VerticalLine;

        public function Main() 
        {
            obj.x=20;
            obj.y=100;
            addChild(obj);
            obj1.buttonMode = true;
            trace("init()")
            obj.buttonMode=true;
            obj1.x=150;
            obj1.y=100;
            addChild(obj1);

            obj2.buttonMode=true;
            obj2.x=280;
            obj2.y=100;
            addChild(obj2);

            obj3.buttonMode=true;
            obj3.x=430;
            obj3.y=100;
            addChild(obj3);

            p = new VerticalLine();
            addChild(p);
            p.visible = false;

            Obj_Arr.push(obj);
            Obj_Arr.push(obj1);
            Obj_Arr.push(obj2);
            Obj_Arr.push(obj3);

            for (var i:int = 0; i < Obj_Arr.length; i++)
            {
                Obj_Arr[i].index = i;
                Obj_Arr[i].addEventListener(MouseEvent.MOUSE_DOWN, OnDown);
                Obj_Arr[i].addEventListener(MouseEvent.MOUSE_UP, OnUp);
            }
        }

        private function OnDown(e:MouseEvent):void
        {
            e.target.startDrag();
            trace(e.target.index);
            trace("remove...")
            Obj_Arr.splice(e.target.index,1)
            e.target.addEventListener(MouseEvent.MOUSE_MOVE, OnMove);
        }

        private function OnMove(e:MouseEvent):void
        {
            for (var i:int = 0; i < Obj_Arr.length; i++)
            {
                if(e.target.x==(Obj_Arr[i].x)) 
                {
                    p.visible = true;
                    p.x = Obj_Arr[i].x;
                    p.y = Obj_Arr[i].y;
                    i = Obj_Arr.length;
                }
                else
                {
                    p.visible =false;
                }
            }
        }

        private function OnUp(e:MouseEvent):void
        {
            p.visible =false;
            e.target.stopDrag();
            Obj_Arr.push(e.target);
            for (var i:int = 0; i < Obj_Arr.length; i++)
            {       
                if(e.target.index == (Obj_Arr[i].index)) 
                {
                    trace("add...");
                    Obj_Arr[i].x = e.target.x;
                    Obj_Arr[i].index = i;
                }
            }
            e.target.removeEventListener(MouseEvent.MOUSE_MOVE, OnMove);
        }
    }   
}

Но этот код работает неправильно.

Пожалуйста, помогите!

Заранее спасибо.

1 Ответ

2 голосов
/ 23 февраля 2012

Вот ответ, что все, что я хочу, я сделал ошибку, что я устанавливал индекс массива внутри условия соответствия, который должен быть установлен внутри цикла for для события MOUSE_UP.

package  
{
    import flash.display.DisplayObject;
    import flash.display.MovieClip;
    import flash.events.MouseEvent;

    public class Main extends MovieClip
    {
        private var obj:Rectangle1 = new Rectangle1();
        private var obj1:Rectangle1 = new Rectangle1();
        private var obj2:Rectangle1 = new Rectangle1();
        private var obj3:Rectangle1=new Rectangle1();
        public var Obj_Arr:Array = [];
        private var vertical_line:VerticalLine;
        private var horizontal_line:HorizontalClass;

        public function Main() 
        {
            obj.x=20;
            obj.y=100;
            addChild(obj);
            obj1.buttonMode = true;

            obj.buttonMode=true;
            obj1.x=150;
            obj1.y=100;
            addChild(obj1);

            obj2.buttonMode=true;
            obj2.x=280;
            obj2.y=100;
            addChild(obj2);

            obj3.buttonMode=true;
            obj3.x=430;
            obj3.y=100;
            addChild(obj3);

            vertical_line = new VerticalLine();
            addChild(vertical_line);
            vertical_line.visible = false;

            horizontal_line = new HorizontalClass();
            addChild(horizontal_line);
            horizontal_line.visible = false;

            Obj_Arr.push(obj);
            Obj_Arr.push(obj1);
            Obj_Arr.push(obj2);
            Obj_Arr.push(obj3);

            for (var i:int = 0; i < Obj_Arr.length; i++)
            {
                Obj_Arr[i].index = i;
                Obj_Arr[i].addEventListener(MouseEvent.MOUSE_DOWN, OnDown);
                Obj_Arr[i].addEventListener(MouseEvent.MOUSE_UP, OnUp);
            }
        }

        private function OnDown(e:MouseEvent):void
        {
            e.target.startDrag();
            Obj_Arr.splice(e.target.index,1)
            e.target.addEventListener(MouseEvent.MOUSE_MOVE, OnMove);
        }

        private function OnMove(e:MouseEvent):void
        {
            for (var i:int = 0; i < Obj_Arr.length; i++)
            {
                if(e.target.x==(Obj_Arr[i].x)) 
                {
                    trace("vertical...");
                    vertical_line.visible = true;
                    vertical_line.x = Obj_Arr[i].x;
                    vertical_line.y = Obj_Arr[i].y;
                    i = Obj_Arr.length;
                }
                else
                {
                    vertical_line.visible =false;
                }               
            }

            for (var i:int = 0; i < Obj_Arr.length; i++)
            {
                if(e.target.y==(Obj_Arr[i].y)) 
                {
                    trace("horizontal...");
                    horizontal_line.visible = true;
                    horizontal_line.x = Obj_Arr[i].x;
                    horizontal_line.y = Obj_Arr[i].y;
                    i = Obj_Arr.length;
                }
                else
                {
                    horizontal_line.visible =false;
                }
            }
        }

        private function OnUp(e:MouseEvent):void
        {
            vertical_line.visible = false;
            horizontal_line.visible = false;
            e.target.stopDrag();
            Obj_Arr.push(e.target);

            for (var i:int = 0; i < Obj_Arr.length; i++)
            {       
                if(e.target.index == (Obj_Arr[i].index)) 
                {
                    Obj_Arr[i].x = e.target.x;                  
                }
                Obj_Arr[i].index = i;
            }
            e.target.removeEventListener(MouseEvent.MOUSE_MOVE, OnMove);
        }
    }   
}
...