Actionscript 3 我有一个AS3类,它用动态图像扩展movieClip,如何使这个图像可拖动?

Actionscript 3 我有一个AS3类,它用动态图像扩展movieClip,如何使这个图像可拖动?,actionscript-3,draggable,loader,movieclip,Actionscript 3,Draggable,Loader,Movieclip,我需要使一个项目可拖动(可拖动?)抱歉,如果我的术语不正确 我有一个类,我将在其中存储变量并进行计算: package Classes { import flash.display.*; import flash.events.*; import flash.net.*; public class PrintItem extends MovieClip { public var imageLoader:Loader;

我需要使一个项目可拖动(可拖动?)抱歉,如果我的术语不正确

我有一个类,我将在其中存储变量并进行计算:

package Classes
{
    import flash.display.*;
    import flash.events.*;
    import flash.net.*;

    public class PrintItem extends MovieClip
    {     
        public var imageLoader:Loader;

        public function PrintItem()
        {

        }

        public function loadImage(url:String):void
        {
            imageLoader = new Loader();
            imageLoader.load(new URLRequest(url));
        }
    }
} 
我创建了该类的一个新实例,在loadImage中向其传递了一个URL,并将其添加到画布中,如下所示:

var myItem:PrintItem = new PrintItem();
myItem.loadImage("pic.jpg");
this.addChild(myItem.imageLoader);
myItem.imageLoader.x = 50;
myItem.imageLoader.y = 50;
myItem.imageLoader.addEventListener(MouseEvent.MOUSE_DOWN, pickUp);
myItem.imageLoader.addEventListener(MouseEvent.MOUSE_UP, dropIt);
public function loadImage(url:String):void
{
    imageLoader = new Loader();
    imageLoader.load(new URLRequest(url));
    this.addChild(imageLoader); // IMPORTANT!
    this.mouseChildren = false;
    this.addEventListener(MouseEvent.MOUSE_DOWN, pickUp);
    this.addEventListener(MouseEvent.MOUSE_UP, dropIt);
}

但我被卡住了。我需要将此项设置为可拖动,并编写拾取和丢弃功能。event.target.startDrag(false);无法工作(加载程序无法拖动)和event.target.parent.startDrag(false);当整个舞台变得拖拉时,就不起作用了!帮助是因为只有加载程序添加到后台吗?

确定。我知道这只是几分钟,但我已经找到了答案。把它写在这里让我头脑清醒。以下是我的工作原理,以防对其他人有所帮助:

首先,我将加载程序映像作为子对象添加到类中,如下所示:

var myItem:PrintItem = new PrintItem();
myItem.loadImage("pic.jpg");
this.addChild(myItem.imageLoader);
myItem.imageLoader.x = 50;
myItem.imageLoader.y = 50;
myItem.imageLoader.addEventListener(MouseEvent.MOUSE_DOWN, pickUp);
myItem.imageLoader.addEventListener(MouseEvent.MOUSE_UP, dropIt);
public function loadImage(url:String):void
{
    imageLoader = new Loader();
    imageLoader.load(new URLRequest(url));
    this.addChild(imageLoader); // IMPORTANT!
    this.mouseChildren = false;
    this.addEventListener(MouseEvent.MOUSE_DOWN, pickUp);
    this.addEventListener(MouseEvent.MOUSE_UP, dropIt);
}
然后我只需将类添加到stage,而不是加载程序:

this.addChild(myItem);
回到课堂上,我添加了以下内容:

public function pickUp(event:MouseEvent):void
{
  trace("Pickup");
  this.startDrag(false);
}
public function dropIt(event:MouseEvent):void
{
  this.stopDrag();
  trace("X = " + event.target.x + " Y = " + event.target.y); // Just to help me
}

瞧!成功了

您会发现,如果您快速拖动并释放,dropIt将不会被触发,因为您已经释放了imageLoader。要解决此问题,dropIt的侦听器应该在阶段级别进行侦听。它应该在您的拾取功能中执行此操作。别忘了从dropIt函数中删除它。