2017-03-03 161 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