如何设置拖拽X限制

时间:2017-03-03 18:21:45

标签: actionscript-3

我正在研究一些可拖动/可放置的条。所以它只能拖动x,因为这是选择条。问题是选择按钮可拖出舞台限制。我想只在阶段限制中可拖动。我尝试了一些方法hitTestPoint和newshape但它没有用。

// define lock on y-axis
var LOCKY:Number = secbuton.y;
 
stage.addEventListener(MouseEvent.MOUSE_MOVE, _mouseMove);
function _mouseMove(e:MouseEvent):void
{
if(secbuton.y != LOCKY) secbuton.y = LOCKY;
}
 
// dragging
secbuton.addEventListener(MouseEvent.MOUSE_DOWN, _mouseDown);
function _mouseDown(e:MouseEvent):void
{
secbuton.startDrag(false, new Rectangle(35,345,420));
secbuton.addEventListener(MouseEvent.MOUSE_UP, _mouseUp);
}
 
// dropping
function _mouseUp(e:MouseEvent):void
{
secbuton.stopDrag();
secbuton.removeEventListener(MouseEvent.MOUSE_UP, _mouseUp);

            if(secbuton.hitTestObject(kose1)){
    secbuton.x = levcbk1.x +5  
    }

    if(secbuton.hitTestObject(lev2)){
    secbuton.x = levcbk2.x +5  
    }
 if(secbuton.hitTestObject(lev3)){
    secbuton.x = levcbk3.x +5
    }
                 if(secbuton.hitTestObject(lev4)){
    secbuton.x = levcbk4.x +5
    }

                         if(secbuton.hitTestObject(lev5)){
    secbuton.x = levcbk5.x +5
    }
}

更新

通常情况下这样工作。

[![在此处输入图像说明] [1]] [1]

但是当碰到边框或尝试拖动到y轴时会出现问题。

[![在此处输入图像说明] [2]] [2]

1 个答案:

答案 0 :(得分:2)

不要使用MOUSE_LEAVE。使用MOUSE_UP,但stage对象 - MOUSE_UP会被stage对象调度,即使您在Flash播放器窗口外发布按钮(基本上在任何地方)

所以只需更改这些行

secbuton.addEventListener(MouseEvent.MOUSE_UP, _mouseUp);
secbuton.removeEventListener(MouseEvent.MOUSE_UP, _mouseUp);

到此:

stage.addEventListener(MouseEvent.MOUSE_UP, _mouseUp);
stage.removeEventListener(MouseEvent.MOUSE_UP, _mouseUp);

正如Organis所说。 Rectangle参数为x , y , width and height。 所以我从你想要的GIF上看到它设置为:

secbuton.startDrag(false, new Rectangle(35,345,420-35,0));

如果将矩形高度设置为0,则您的对象将锁定在y轴上(在您的情况下为345),因此您不需要使用LOCKY变量并移动侦听器