2009-08-24 28 views
0

我想創建一個簡單的拖放Flash程序,用戶可以將聖誕飾品拖放到樹上。我不需要拖動一次裝飾物,而是需要一個功能,以便每次點擊一個裝飾物時,它將同一個類的新裝飾物添加到裝飾物被點擊的舞臺上。目前我有這個工作,但有一個問題。它不是動態的。查看「拖動」功能,我選擇了「Symbol31」類作爲默認添加的飾品。相反,我希望ActionScript讀取點擊的裝飾類並添加該類,而不是每次都添加「Symbol31」。使用動作腳本3.0來檢測被點擊的符號類

請參閱下面的代碼。

感謝

public class DragDrop extends MovieClip 
{ 
    private var originalX:Number; 
    private var originalY:Number; 

    public function DragDrop() 
    { 
     originalX = this.x; 
     originalY = this.y; 
     this.addEventListener(MouseEvent.MOUSE_DOWN, drag); 
    } 

    private function drag(event:MouseEvent):void 
    { 
     if(event.target.x>Number(600)) 
     { 
      var newOrnament:Symbol31 = new Symbol31(); 
      newOrnament.x=originalX; 
      newOrnament.y=originalY; 
      this.parent.addChild(newOrnament); 
      newOrnament.startDrag(); 
      newOrnament.addEventListener(MouseEvent.MOUSE_UP, drop); 
     }else{ 
      this.startDrag(); 
      this.parent.addChild(this); 
      this.addEventListener(MouseEvent.MOUSE_UP, drop); 
     } 

    } 

回答

2

最靈活的解決方案將是event.target突入的getQualifiedClassName(flash.utils的一部分),然後傳遞到這getDefinitionByName(也flash.utils)轉向首先得到類的名稱將該字符串轉換爲對實際類的引用。創建一個新的類,然後離開你。

+0

這是偉大的!謝謝 – 2009-08-24 04:23:23

0

假設你有你所有的飾物一個基類,你可以不喜歡以下?

var newOrnament = event.target as OrnamentBase 
if (newOrnament != null) 
{ 
    // your code 
} 
0

捎帶上什麼布蘭登霍爾說的代碼可能是這個樣子:

var ClassReference:Class = getDefinitionByName(getQualifiedClassName(e.target)) as Class; 
var instance:DisplayObject = new ClassReference(); 
addChild(instance);