我正在 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/