Actionscript 3 如何阻止MCs切换位置
我有一个问题,我的电影剪辑切换位置时,我把一个放在另一个上面。应该发生的是,电影剪辑应该返回到其原始位置,除非我放置在指定的特定位置。当我把它放在一个空白点或指定的放置点时,它可以正常工作,只有当我把它放在另一个电影剪辑上时,这两个电影剪辑才会切换位置,并且它们会被弄乱 我尝试过用“mouseEnabled=false”禁用所有内容,并在任何电影剪辑上悬停时将其设置回“mouseEnabled=true”,但它没有响应。有人有线索吗Actionscript 3 如何阻止MCs切换位置,actionscript-3,Actionscript 3,我有一个问题,我的电影剪辑切换位置时,我把一个放在另一个上面。应该发生的是,电影剪辑应该返回到其原始位置,除非我放置在指定的特定位置。当我把它放在一个空白点或指定的放置点时,它可以正常工作,只有当我把它放在另一个电影剪辑上时,这两个电影剪辑才会切换位置,并且它们会被弄乱 我尝试过用“mouseEnabled=false”禁用所有内容,并在任何电影剪辑上悬停时将其设置回“mouseEnabled=true”,但它没有响应。有人有线索吗 function Placed(e){ if(e.ta
function Placed(e){
if(e.target.hitTestObject(Destination)) {
e.target.stopDrag();
e.target.enabled = false;
e.target.mouseEnabled = false;
}
else {
e.target.x = xPos;
e.target.y = yPos;
e.target.stopDrag();
}
}
这是假定使MCs返回其原始位置或粘附到指定位置的代码。我认为这是非常清楚的MCs应该做什么给代码,所以我不知道为什么他们决定切换位置时,我把他们放在彼此的顶部
编辑*:我将把我的全部代码贴在这句话下面,这可能有助于更好地理解它可能有什么问题。这段代码已经有了Vesper和null.point3r的想法,但仍然没有解决这个问题
当我将MC放置在目标中时,它将保留自身的克隆并禁用拖动的MC。如果我没有将其放置在目标中,则不会留下克隆。我创建了3个MCs,顺序是MC1、MC2、MC3。当我把旧的MC放在新的MC上时,它们会切换位置,比如说我把MC1放在MC2或MC3上,但是当我做相反的事情时,比如说MC3放在MC2或MC1上,什么都不会发生,这对前者来说也是如此
import flash.events.MouseEvent;
import flash.display.MovieClip;
import flash.events.Event;
var xPos:int;
var yPos:int;
var temp = 0;
var Drag:DisplayObject;
//Count for Amount MCs
for (var i=1; i<4; i++)
{
this["Amount" + i].addEventListener(MouseEvent.MOUSE_DOWN, CheckDrag);
this["Amount" + i].addEventListener(MouseEvent.MOUSE_UP, Placed);
this["Amount" + i].buttonMode = true;
}
//Gets original position of selected Amount and allows dragging
function Trace(e){
getPosition(e.target);
e.target.startDrag();
}
//Stores original position of selected/dragged Amount
function getPosition(target:Object):void{
xPos = target.x;
yPos = target.y;
}
//Check if a MC is being dragged
function CheckDrag(e){
if(Drag != null) return;
Drag = e.target;
Trace(e);
}
//Checks if placed in Ledger, returns to original position if false
function Placed(e){
if(Drag == null) return;
//Add Child on Mouse_UP
var Xtra:Class = getDefinitionByName(getQualifiedClassName(e.currentTarget)) as Class;
var Extra:MovieClip = new Xtra();
this.addChildAt(Extra,1);
Extra.x = xPos;
Extra.y = yPos;
//Disable Drag of selected Amount and set position in Desitnation
if(e.target.hitTestObject(Destination)){
e.currentTarget.stopDrag();
e.currentTarget.enabled = false;
e.currentTarget.mouseEnabled = false;
}
//Return Amount to original position and remove Child
else{
e.currentTarget.x = xPos;
e.currentTarget.y = yPos;
e.currentTarget.stopDrag();
removeChild(Extra);
}
Drag = null;
}
导入flash.events.MouseEvent;
导入flash.display.MovieClip;
导入flash.events.Event;
var-xPos:int;
var-yPos:int;
var-temp=0;
变量拖动:显示对象;
//计算金额
对于(var i=1;i您显然缺少标志指示,这使得您的第二个MC被分配了错误的坐标。您需要有一个变量,该变量将包含您现在是否正在拖动MC的信息,这样,如果有,您的MC的开始拖动代码将不会干扰。您在某处分配了xPos
和yPos
,您的代码如下所示:
function someListener(e:MouseEvent):void {
xPos=e.target.x;
yPos=e.target.y;
e.target.startDrag();
}
var draggedObject:DisplayObject;
function someListener(e:MouseEvent):void {
if (draggedObject!=null) return;
// ^ this means something is being dragged, this clip shouldn't react
draggedObject=e.target;
xPos=e.target.x;
yPos=e.target.y;
e.target.startDrag();
}
您必须首先检查是否有对象被拖动,如下所示:
function someListener(e:MouseEvent):void {
xPos=e.target.x;
yPos=e.target.y;
e.target.startDrag();
}
var draggedObject:DisplayObject;
function someListener(e:MouseEvent):void {
if (draggedObject!=null) return;
// ^ this means something is being dragged, this clip shouldn't react
draggedObject=e.target;
xPos=e.target.x;
yPos=e.target.y;
e.target.startDrag();
}
然后,在即将停止拖动时,清除draggedObject
变量
function Placed(e){
if (draggedObject==null) return; // safety precaution
if(e.target.hitTestObject(Destination)) {
e.target.stopDrag();
e.target.enabled = false;
e.target.mouseEnabled = false;
}
else {
e.target.x = xPos;
e.target.y = yPos;
e.target.stopDrag();
}
draggedObject=null;
}
PS:您可能希望避免为此使用manager类,而是将那些XPO
和YPO
存储在您要移动的MC上。将e.target
替换为e.currentTarget
,它们仍然会改变位置……我尝试添加了您的建议,但它仍然会互换。然而,我注意到的是3我拥有的MCs,按照我制作它们的MC1、MC2、MC3的顺序,只有当我把旧的MC放在新的MC上时,它们才会交换,比如说MC1到MC3,但是当我做相反的事情,MC3到MC1,什么都不会发生。Hm-m-m。请用startDrag()的侦听器的代码更新问题
,以及这些侦听器的分配。我的描述只是一个粗略的猜测,但显然是对了一半,因为我假设两个目标都会调用它们的侦听器。我已经将我在示例试用中使用的全部代码按照您建议的方式放置。我仍然对侦听器之类的技术术语感到困惑当谈到编程时,我可能会对你们所指的东西感到困惑。