我尝试使用动作脚本3 在Flash中拖放文本字段,
我知道如何使常规对象可拖动,但是当我尝试拖动文本字段时会出现问题。
对于常规对象,我一直在使用以下代码:
事件监听器:
Object.addEventListener(MouseEvent.MOUSE_DOWN, MouseDOWN);
Object.addEventListener(MouseEvent.MOUSE_UP, MouseUP);
功能:
function MouseDOWN(evt:Event):void {
evt.target.startDrag();
}
function MouseUP(evt:Event):void {
evt.target.stopDrag();
}
我尝试过许多改变目标的事情。到' currentTarget'等,但仍无法找到解决方案。
所以我的问题是,如何让文字字段可选择并可拖动?
答案 0 :(得分:2)
startDrag();
和stopDrag();
是Sprite
类的方法,也由MovieClip
继承,Sprite
检查官方的Adobe文档以查看哪些类继承了哪些方法是个好主意;
因为Sprite
和MovieClip
都是DisplayObjectContainer
类的基类,所以简单的解决方案是将TextField
对象简单地存储在Sprite
对象中使用addChild();
var textBox:TextField = new TextField;
textBox.text = "sometext";
var textContainer:Sprite = new Sprite();
textContainer.addChild(textBox);
textContainer.startDrag();
addChild(textContainer);
然后,您可以使用Sprite
的所有功能将其拖到舞台上。
修改强>
另一种选择是使用您自己的自定义类扩展TextField类,并实现您自己的startDrag()
和stopDrag()
方法。
然后,您可以使用公开的update()
方法,您可以从主要类中调用mouseX
,mouseY
属性,然后设置对象的x
},y
属性。您可以使用简单的Boolean
打开和关闭此功能。
这是更多的工作,是的,但是如果出于某种原因你需要使用TextField
类型对象(例如,如果你需要将它传递给另一个需要它的类型为TextField
的对象),那么你的类也将是一种TextField
,因为它将它作为基类继承。