AS3: Как я могу определить границы для перетаскиваемого объекта? - PullRequest
3 голосов
/ 18 мая 2011

Я делаю средство для отображения изображений во вспышке, но я не могу обернуть голову, как ограничить ползунок до area_mc.В основном в mouseMoveHandler.Может кто-нибудь дать мне несколько советов?

import com.greensock.*;
import com.greensock.easing.*;

function init():void  {
    area_mc.sliderbar_mc.buttonMode = true;
    area_mc.sliderbar_mc.addEventListener(MouseEvent.MOUSE_DOWN,moveSliderbar);
    stage.addEventListener(MouseEvent.MOUSE_UP,stopSliderbar);
    area_mc.mask_mc.alpha = 0;
    area_mc.after_mc.mask = area_mc.mask_mc;
    TweenLite.to(area_mc.sliderbar_mc,3,{x:stage.stageWidth/2,ease:Elastic.easeOut});
    TweenLite.to(area_mc.mask_mc,3,{x:stage.stageWidth/2,ease:Elastic.easeOut});
}  

function moveSliderbar(event:MouseEvent):void {
    stage.addEventListener(MouseEvent.MOUSE_MOVE,mouseMoveHandler);
}  

function stopSliderbar(event:MouseEvent):void {
    stage.removeEventListener(MouseEvent.MOUSE_MOVE,mouseMoveHandler);
}

function mouseMoveHandler(event:MouseEvent):void {
    area_mc.sliderbar_mc.x = area_mc.mouseX;
    var left:Number = area_mc.x - (area_mc.width / 2);
    var right:Number = area_mc.x + (area_mc.width / 2);

    if (area_mc.sliderbar_mc.x > right) {
        area_mc.sliderbar_mc.x = right;
    }
    else if(area_mc.sliderbar_mc.x < left){
        area_mc.sliderbar_mc.x = left;
    }
    area_mc.mask_mc.x = area_mc.sliderbar_mc.x;
}

init();

1 Ответ

6 голосов
/ 18 мая 2011

На основании того, что я интерпретировал ваш вопрос как: "как я могу задать границы перетаскиваемого элемента?".

startDrag() имеет параметр, который принимает Rectangle (flash.geom.Rectangle), который будет действовать в качестве границы, куда вы можете перетащить что-то.

например.

var rect:Rectangle = new Rectangle(0,0,100,100);
startDrag(false, rect);

Вот как я бы сделал объект, который вы перетаскиваете и ограничиваете:

package
{
    import flash.display.MovieClip;
    import flash.geom.Rectangle;
    import flash.events.MouseEvent;

    public class DragableItem extends MovieClip
    {
        // vars
        private var _boundaries:Rectangle;

        /**
         * Constructor
         */
        public function DragableItem()
        {
            // define boundaries
            // left, top, right, bottom
            _boundaries = new Rectangle(30,30,200,200);

            addEventListener(MouseEvent.MOUSE_DOWN, _mouseDown);
        }

        /**
         * MOUSE_DOWN
         */
        private function _mouseDown(e:MouseEvent):void
        {
            startDrag(false, _boundaries);

            addEventListener(MouseEvent.MOUSE_UP, _stopDrag);
            addEventListener(MouseEvent.MOUSE_OUT, _stopDrag);
        }

        /**
         * MOUSE_UP
         */
        private function _stopDrag(e:MouseEvent):void
        {
            stopDrag();

            removeEventListener(MouseEvent.MOUSE_UP, _stopDrag);
            removeEventListener(MouseEvent.MOUSE_OUT, _stopDrag);
        }
    }
}

Быстрый тест:

var drg:DragableItem = new DragableItem();

drg.graphics.beginFill(0);
drg.graphics.drawRect(0,0,60,60);
drg.graphics.endFill();

addChild(drg);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...