2010-08-11 26 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

相關問題