单击按钮退出框架时删除拖放对象
Posted
技术标签:
【中文标题】单击按钮退出框架时删除拖放对象【英文标题】:remove drag and drop objects when exit frame on button click 【发布时间】:2016-06-14 16:03:41 【问题描述】:我想制作一个允许用户将图片与包含单词首字母的框匹配的 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");
【问题讨论】:
如何进入下一帧?当您使用addChild
来作为对象的父对象或重新设置对象时,您需要使用removeChild
来摆脱它。一旦重新设置父级(如果最初在时间轴上设置父级),时间轴将不再影响对象。看起来您可能需要做的就是手动清除所有孩子,然后再继续下一帧removeChildren(); nextFrame();
。
我尝试使用按钮单击来移动下一帧。我已经尝试过使用 removeChildren();但它给了我一个错误 1180:调用可能未定义的方法 removeChildren。这里真的需要帮助。谢谢。
您需要出示您的相关代码。更新您的问题并包含您用于转到下一帧的代码。
感谢您的回复,已经更新并包含我用来转到其他场景的代码。非常感谢您的帮助。
removeChildren 仅适用于 Flash Player 11 或更高版本。你输出的是什么版本?
【参考方案1】:
当您通过代码对时间线对象执行导致父级更改的操作时,该时间线对象将不再受时间线控制。
所以当你这样做时:
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
如果你的目标是旧版本的 flash(小于 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
另一种选择是复制单击的项目,将其添加到舞台,然后拖动副本并在鼠标移动时将其与原始位置匹配。拖动完成后,从舞台上移除副本。
【讨论】:
以上是关于单击按钮退出框架时删除拖放对象的主要内容,如果未能解决你的问题,请参考以下文章