2017-03-03 98 views
2

我正在处理一些可拖拽/拖拽的酒吧。因此它只能拖拽x因为这是选择栏。问题是选择按钮可拖拽出舞台限制。我想只能在阶段limit.I尝试一些方法hitTestPoint和newshape,但它没有工作。如何设置拖拽X限制

// 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 
    } 
} 

UPDATE

通常酒吧的工作是这样的。

[![在这里输入的形象描述] [1] [1]

但问题是有打击的边界时或当尝试拖动到Y轴。

[![在这里输入的形象描述] [2] [2]

+0

第二个参数:** public function startDrag(lockCenter:Boolean = false,bounds:Rectangle = null):void ** http://help.adobe.com/zh_CN/FlashPlatform/reference/actionscript/3/flash/显示/ Sprite.html#startDrag() – Organis

+0

我是新的class.Im使用帧代码。我可以在帧代码中做到这一点? – KucuKeko

+0

** secbuton.startDrag(false,new Rectangle(...)); **并在您传递的Rectangle构造函数中**矩形区域的左侧,顶部,宽度,高度**,该矩形区域应该是用于拖动的边界框你的secbutton对象。 – Organis

回答

1

不要使用MOUSE_LEAVE。使用MOUSE_UPstage对象 - MOUSE_UPstage对象调度即使它在Flash Player窗口外面你释放按钮(基本上任何地方)

所以,简单地改变这些线

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

如果设置矩形HEIGH到0,你的对象将在y轴(345你的情况)锁定,这样你不不需要使用LOCKY变量并移动侦听器。

+0

谢谢,它确实有效。 – KucuKeko