我想制作Flash应用程序,允许用户将图片与包含该单词的第一个字母的框匹配。该方法是用目标拖放的。我真的很陌生。
拖放目标到目前为止工作但我的问题是当我移动对象后退出框架时,拖放对象仍然可见。
离开帧时如何删除此对象?
这是我得到的:
import flash.events.MouseEvent;
import flash.display.DisplayObject;
var objectoriginalX:Number;
var objectoriginalY:Number;
a.buttonMode = true;
a.addEventListener(MouseEvent.MOUSE_DOWN, pickupObject);
a.addEventListener(MouseEvent.MOUSE_UP, dropObject);
function pickupObject(event:MouseEvent):void
{
event.target.startDrag();
event.target.parent.addChild(event.target);
objectoriginalX = event.target.x;
objectoriginalY = event.target.y;
}
function dropObject(event:MouseEvent):void
{
event.target.stopDrag();
var matchingTargetName:String = "target" + event.target.name;
var matchingTarget:DisplayObject = getChildByName(matchingTargetName);
if(event.target.dropTarget != null && event.target.dropTarget.parent == matchingTarget)
{
event.target.removeEventListener(MouseEvent.MOUSE_DOWN, pickupObject);
event.target.removeEventListener(MouseEvent.MOUSE_UP, dropObject);
event.target.buttonMode = false;
event.target.x = matchingTarget.x;
event.target.y = matchingTarget.y;
}
else
{
event.target.x = objectoriginalX;
event.target.y = objectoriginalY;
}
}

先前感谢,任何建议都将受到赞赏
编辑:这是我用来移动到其他场景的代码
HOME1.addEventListener(MouseEvent.CLICK, fl_ClickToGoToScene_15);
function fl_ClickToGoToScene_15(event:MouseEvent):void
{
MovieClip(this.root).gotoAndStop(2, "Scene 1");
}

答案 0 :(得分:0)
当您通过代码对时间轴对象执行某些操作以导致父项更改时,该时间轴对象将不再受时间轴控制。
所以当你这样做时:
event.target.parent.addChild(event.target);
(大概是将项目拖到前面),你无意中告诉Flash这个对象现在由代码控制。
解决方案是在完成对象时手动删除对象。这可以使用removeChild(childObject)
完成。
由于您可能正在处理可以拖动的多个对象,因此在进入下一帧之前,最简单的方法是手动清除所有子项:
removeChildren(); //remove all children of the current context (timeline)
nextFrame(); //go to the next frame, or play(); or whatever you want to do
如果您定位的是较旧版本的闪存(少于11个不支持removeChildren
方法),您可以在其中执行此操作:
var i:int = numChildren;
while(i--){
removeChildAt(i);
}
或者,如果您不想清除当前时间轴中的所有孩子,您可以跟踪被拖动的内容并删除这些对象:
var draggedObjs:Array = [];
function pickupObject(event:MouseEvent):void
{
draggedObjs.push(event.target);
...rest of code
然后在准备继续时执行此操作:
for each(obj in draggedObjs){
removeChild(obj);
}
draggedObjs = [];
nextFrame(); //or whatever
另一个选项是复制单击的项目,将其添加到舞台,然后拖动副本并在鼠标移动时将原始位置与其匹配。拖动完成后,从舞台中删除副本。