拖放文本字段AS3

时间:2015-01-02 19:50:50

标签: actionscript-3 flash actionscript drag-and-drop

我尝试使用动作脚本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'等,但仍无法找到解决方案。

所以我的问题是,如何让文字字段可选择并可拖动?

1 个答案:

答案 0 :(得分:2)

startDrag();stopDrag();Sprite类的方法,也由MovieClip继承,Sprite

的子类

检查官方的Adobe文档以查看哪些类继承了哪些方法是个好主意;

Sprite class

TextField class

因为SpriteMovieClip都是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()方法,您可以从主要类中调用mouseXmouseY属性,然后设置对象的x },y属性。您可以使用简单的Boolean打开和关闭此功能。

这是更多的工作,是的,但是如果出于某种原因你需要使用TextField类型对象(例如,如果你需要将它传递给另一个需要它的类型为TextField的对象),那么你的类也将是一种TextField,因为它将它作为基类继承。