flash - AS3 : How can I define boundaries for a drag-able object?

标签 flash actionscript-3

我正在 flash 中制作图像显示器,但我无法思考如何将 slider 限制到 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();

最佳答案

根据我将您的问题解释为:“我怎样才能给可拖动的项目边界?”。

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);

关于flash - AS3 : How can I define boundaries for a drag-able object?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6040298/

相关文章:

apache-flex - 如何在不使用任何 html 的情况下将参数发送到 swf?

c# - C# 中的 MD5 哈希值与 Action Script 中的 MD5 哈希值不匹配

flash - 将对象置于前面,在 Flash AS3 中

javascript - 当在 html 对象标签上调用 JS 函数 'postMessage()' 时,它会做什么?

android - 从 Adob​​e Air android 应用程序发布到 facebook 墙

javascript - JWPlayer 自动检测每个用户的最佳质量,而不使用其他浏览器的 flash 播放器(HLS、.m3u8)?

android - Intellij IDEA 将我的源码打包成.apk

php - 如何在 Joomla 中完成的网站中添加背景音乐?

jquery - 免费的在线文件 (pdf) 查看器

actionscript-3 - adobe media server 4 与亚马逊的费用如何?