拖放文本字段 AS3

Drag and Drop Text Fields AS3

我正在尝试使用 Action 脚本 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();
}

我尝试了很多方法,例如将 'target' 更改为 'currentTarget' 等,但仍然找不到解决方案。

所以我的问题是,如何使文本字段可选择和拖动?

startDrag();stopDrag();Spriteclass的方法,也被MovieClip继承,是子class共 Sprite

最好查看 Adob​​e 官方文档以了解哪些 class 继承了哪些方法;

Sprite class

TextField class

因为SpriteMovieClip都是DisplayObjectContainerclass的基础class,简单的解决方案是简单地存储TextField object inside a Sprite object using addChild();

        var textBox:TextField = new TextField;
        textBox.text = "sometext";
        var textContainer:Sprite = new Sprite();
        textContainer.addChild(textBox);
        textContainer.startDrag();
        addChild(textContainer);

然后您可以使用 Sprite 的所有功能将其拖过舞台。

编辑:

另一种选择是使用您自己的自定义 class 扩展 TextField class 并实现您自己的 startDrag()stopDrag() 方法。

然后您将有一个 public update() 方法,您可以从主 class 调用该方法,该方法将接受 mouseXmouseY然后设置对象的 xy 属性。您可以使用简单的 Boolean.

打开和关闭此功能

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