2011-05-18 29 views
3

我正在製作一個閃光燈的圖像識別器,但我無法圍繞如何將滑塊限制到area_mc。主要在mouseMoveHandler。有人能給我一些指點嗎?AS3:如何定義可拖拽對象的邊界?

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(); 
+0

我非常困惑..你的問題和的標題問題本身似乎不相關? – Marty 2011-05-18 05:41:20

+0

哦,對不起,如果它。我的意思是當它被拖動時,要問如何禁止「area_mc」中的「sliderbar_mc」。因爲現在它超出了area_mc的左側和右側。希望清除它? – muudles 2011-05-18 06:15:41

+0

你的意思是你想拖動一個動畫片段並讓另一個動畫片就像附着它一樣嗎? – Marty 2011-05-18 06:18:49

回答

6

基於我解釋你的問題爲:「我怎樣才能給一個可拖拽項目的界限?」。

startDrag()有一個參數,它接受一個Rectangleflash.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); 
相關問題