【问题标题】:I have a AS3 class which extends movieClip with a dynamic image, how to make this image draggable?我有一个用动态图像扩展movieClip 的AS3 类,如何使该图像可拖动?
【发布时间】:2010-08-11 16:33:32
【问题描述】:

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

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

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);

但是我被卡住了。我需要使这个项目可拖动并编写 pickUp 和 dropIt 函数。 event.target.startDrag(false);不起作用(Loader 不可拖动)和 event.target.parent.startDrag(false);不起作用,因为整个舞台变得可拖动!帮助!是不是因为舞台上只加了Loader?

【问题讨论】:

    标签: actionscript-3 draggable loader movieclip


    【解决方案1】:

    好的。我知道只有几分钟,但我找到了答案。把它写在这里让我头脑清醒。以下是对我有用的方法,以防它帮助其他人:

    首先,我将加载器图像作为子类添加到类中,如下所示:

    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);
    }
    

    然后我只需要将类添加到舞台,而不是加载器:

    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 的侦听器应该在舞台级别进行侦听。它应该在您的 pickUp 函数中执行此操作。不要忘记从你的 dropIt 函数中删除它。
    猜你喜欢
    • 2013-01-18
    • 2014-01-17
    • 2013-01-11
    • 1970-01-01
    • 2019-03-31
    • 1970-01-01
    • 2017-05-16
    • 2012-01-12
    • 1970-01-01
    相关资源
    最近更新 更多