【发布时间】:2014-09-26 03:43:49
【问题描述】:
我正在尝试在 Flash 中制作一个小型拖放应用程序,我已经能够实现以下 -
1)拖动影片剪辑
2)确保两个影片剪辑在相互重叠时不会互换位置
3) 确保被拖动的 MC 停留在其他影片剪辑的顶部 ..
4) 使影片剪辑在其落到指定位置时保持不动
但是,我无法实现一件非常重要的事情,当光标移出舞台时,影片剪辑会卡在光标上,我希望用户离开舞台的那一刻,正在拖动的剪辑回到原来的位置……
我已尝试为此使用 mouse_leave 选项,但它不起作用...
我正在添加拖放代码如下,请在这里指导我 -
拖码-
保存目标实例、放置实例的数组, 以及放置实例的起始位置。
var hitArray:Array = new Array(hitTarget1,hitTarget2,hitTarget3);
var dropArray:Array = new Array(drop1,drop2,drop3);
var positionsArray:Array = new Array();
这会将鼠标向下和向上监听器添加到放置实例 并添加放置实例的起始 x 和 y 位置 进入数组。
for (var i:int = 0; i < dropArray.length; i++) {
dropArray[i].buttonMode = true;
dropArray[i].addEventListener(MouseEvent.MOUSE_DOWN, mdown);
dropArray[i].addEventListener(MouseEvent.MOUSE_UP, mUp);
positionsArray.push({xPos:dropArray[i].x, yPos:dropArray[i].y});
}
这将拖动已选择的对象并移动它 到显示列表的顶部。这意味着你不能拖动 这个对象在任何东西下面。
function mdown(e:MouseEvent):void {
e.currentTarget.startDrag();
setChildIndex(MovieClip(e.currentTarget), numChildren - 1);
}
这是掉落代码
这会在鼠标移动时停止拖动选定的对象 释放。如果对象落在相应的目标上 然后它被设置为目标的 x 和 y 位置。否则 回到原来的位置。
function mUp(e:MouseEvent):void {
var dropIndex:int = dropArray.indexOf(e.currentTarget);
var target:MovieClip = e.currentTarget as MovieClip;
target.stopDrag();
if (target.hitTestObject(hitArray[dropIndex])) {
target.x = hitArray[dropIndex].x;
target.y = hitArray[dropIndex].y;
}else{
target.x = positionsArray[dropIndex].xPos;
target.y = positionsArray[dropIndex].yPos;
}
}
请告诉我如何在此处使用 mouse_leave 并快速返回, 在下面这样的拖放部分中使用它
stage.addEventListener(Event.MOUSE_LEAVE, mouseLeave);
但总是会出现一些错误,例如阶段不支持属性 x 等。我添加了一些代码,例如将 x 和 y 等同,但它不起作用..请指导
晋
【问题讨论】:
-
改用
stage.addEventListener(MouseEvent.MOUSE_OUT)。 Event.MOUSE_LEAVE 不存在。 -
@SlyRaskal -谢谢,我之前尝试过该代码,它确实可以检测到移动何时离开舞台,但由于某种原因它不会将 MC 恢复到原始状态并且还保持连接到鼠标的 MC 我尝试使用原始 x,y 坐标但它不起作用...@DodgerThud 谢谢,我也会尝试使用鼠标,但似乎 mouse_leave 确实存在...
标签: actionscript-3 flash