当我将影片剪辑一个放在另一个上时,切换位置时遇到问题。应该发生的是,电影剪辑应该返回到它的原始位置,除非我放在我指定的特定位置。当我将其放在空白点或指定的放置点时,它可以正常工作,只有当我将它放到另一个电影剪辑上时,这两个电影剪辑才会交换位置,它们会变得混乱。
当我在任何电影剪辑上悬停时,我试着禁用所有带有"mouseEnabled = false“的设置,并将其设置回"mouseEnabled = true”,但没有响应。有谁有线索吗?
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();
}
}据推测,这是使MC返回到其原始位置或坚持到指定地点的代码。我认为MC应该做什么已经非常清楚了,所以我不知道为什么当我把它们放在一起的时候,它们会决定交换位置。
编辑*:我将在这句话下面发布我的整个代码,它可能有助于更好地理解它可能出了什么问题。这段代码已经有了Vesper和null.point3r的想法,但仍然没有解决问题。
当我将MC放到目标位置时,它会留下一个自身的克隆,并禁用拖动的MC。当我不把它放在目的地时,就不会留下克隆。我有3个MC3创建的顺序为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;
}发布于 2014-03-28 15:00:51
你显然缺乏标志指示,这使得你的第二个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();
}然后,一旦您要停止拖动,就可以清除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:您可能希望避免使用管理器类,而是将这些xPos和yPos存储在您要移动的MC上。
https://stackoverflow.com/questions/22705596
复制相似问题