2010-08-11 69 views
0

我需要制作一个项目可拖动(可拖动?)对不起,如果我的术语不对!我有一个AS3类,它扩展了一个动态图像的movieClip,如何使这个图像可拖动?

我有一个类,我将存储变量,做计算:

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(假);不起作用(Loader不可拖动)和event.target.parent.startDrag(false);在整个舞台变得拖沓时不起作用!帮帮我!是因为只有加载器被添加到舞台上吗?

回答

0

好的。我知道它只有几分钟,但我找到了答案。把它写在这里清除了我的脑海。下面是我的情况下,什么工作可以帮助别人:

首先,我增加了装载机的图像作为子类是这样的:

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 
} 

的Et瞧!有效!

+0

你会发现,如果你快速拖动并释放,那么dropIt不会因为你已经发布imageLoader而被解雇。为了解决这个问题,dropIt的听众应该在舞台级听。它应该在你的拾取功能中做到这一点。不要忘记从dropIt功能中删除它。 – Allan 2010-08-12 00:24:20

相关问题