我试图让一个简单的物体从原来的位置移动到鼠标移动方向的一个角落。但它有点棘手,因为我需要鼠标在其中一个方向上移动一段距离,然后移动对象的角落,鼠标移动(确保我们没有意外移动鼠标/对象)。
我想我必须在按下鼠标时保存起点,然后检查它(鼠标)在其中一个方向上移动XX像素然后移动到某个点以上(在我们确信它不是随机运动)将物体移动到其中一个角落。但是......我无法弄清楚如何通过代码来完成。
为了更清楚地显示上述Ill,用这张照片解释它
所以灰盒子是我们的对象。
箭头是我们可以移动框的方向。
绿线是我们移动鼠标所需的距离(当它被按下时),因此对象在其中一个方向上移动。在此示例中50px /
假设我们点击了右上角的灰色框(填充绿色圆圈),所以如果我们想将框移动到左边,我们至少需要将鼠标(当它仍处于按下时)移动到左空心绿色圆圈的位置。如果我们想将对象移动到右边,我们需要将鼠标移动到右侧空心绿色圆圈,然后灰盒进入该角落。
RED和BLUE圈子只是不同的场景,代表我们点击BOX的不同点以及我们需要移动鼠标的位置,因此BOX会移动。
:)非常感谢任何帮助。
答案 0 :(得分:1)
这是一个简单的例子:
var grayBox:Sprite; //let's say this is your gray square or whatever you're clicking
grayBox.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
var mouseDownPoint:Point = new Point(); //the point to capture on mouse down to compare against
var currentObject:DisplayObject; //to store the current object on mouse down
var threshold:int = 50; //how far in pixels the mouse needs to move before you count it as a move
var didItMove:Boolean = false; //stores whether the current click was a move
function mouseDownHandler(e:MouseEvent):void {
mouseDownPoint.x = e.stageX;
mouseDownPoint.y = e.stageY;
currentObject = e.currentTarget as DisplayObject;
didItMove = false; //reset this
stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHanlder, false, 0, true); //listen to mouse move until mouse up
stage.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);
}
function mouseMoveHandler(e:MouseEvent):void {
if (Math.abs(e.stageX - mouseDownPoint.x) > threshold || Math.abs(e.stageY - mouseDownPoint.y) > threshold) {
//moved far enough
didItMove = true;
stage.removeEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler); //remove listener
}
}
function mouseUpHandler(e:MouseEvent):void {
if(stage.hasEventListener(MouseEvent.MOUSE_MOVE)) stage.removeEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler); //remove listener if still around
stage.removeEventListener(MouseEvent.MOUSE_UP, mouseUpHandler); //remove the mouse up listener from the stage
if (didItMove) {
//do something
//use currentObject
if(e.stageX > mouseDownPoint.x:
if(e.stageY > mouseDownPoint.y){
//bottom right corner
}else {
//top right corner
}
}else{
if(e.stageY > mouseDownPoint.y){
//bottom left corner
}else {
//top left corner
}
}
}
currentObject = null; //free the var so it's hanging around in memory
}