2009-08-24 2 views
0

単純なドラッグアンドドロップのFlashプログラムを作成しようとしています。ここで、ユーザーはツリー上にxmasの装飾をドラッグできます。一度装飾物をドラッグできるのではなく、装飾物をクリックするたびに、装飾物がクリックされるステージに同じクラスの新しい装飾物を追加するような機能が必要です。現在私はこの作業をしていますが、問題が1つあります。それは動的ではありません。 「ドラッグ」機能を見ると、追加されるデフォルトの装飾としてクラス「シンボル31」を選択しました。代わりに、私はActionScriptが、クリックされた装飾のクラスを読み込み、毎回 "Symbol31"ではなくそのクラスを追加するようにします。actionscript 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

最も柔軟なソリューションは、オンに最初れるgetQualifiedClassName(flash.utilsの一部)にevent.target通過した後(またflash.utilsに)getDefinitionByNameにそれを通すことによって、クラスの名前を取得することであろうその文字列を実際のクラスへの参照に変換します。そのクラスの新しいインスタンスを作ってください。

+0

これは素晴らしいです!ありがとうございました –

0

では、次のような何かを行うことができますが、すべてのあなたの装飾のための基底クラスを持っていると仮定すると?

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

はBrandenさんホールは、コードは次のようになります言ったことに便乗するには、次の

var ClassReference:Class = getDefinitionByName(getQualifiedClassName(e.target)) as Class; 
var instance:DisplayObject = new ClassReference(); 
addChild(instance); 
関連する問題