2011-09-14 19 views
0

私はウィンドウの左側にいくつかの車のツールバーを持っていて、1つの要素をクリックしてそれをクローンを作成するボードにドラッグしたいが、できない。AS3でMovieClipをドラッグアンドクローンする

enter image description here

車の左側に私の希望ドラッグされています

私のアプリはこのようになります。

私のソースコードは次のとおりです。

public class Car extends MovieClip 
    { 

     // imports... 

     var newcar:Car; 

     public function Car(){ 
      addListeners(); 
     } 

     private function addListeners():void{ 
      this.addEventListener(MouseEvent.MOUSE_DOWN,clone); 
     } 

     private function clone(e:MouseEvent):void{ 
      // Clone the object 
      newcar = new dibujo(); 
      newcar.graphics.copyFrom(this.graphics); 
      newcar.x = this.x; 
      this.parent.addChild(newcar); 

        // Asign new events to recently created mc 
      newcar.addEventListener(MouseEvent.MOUSE_OVER,dragCar); 
      newcar.addEventListener(MouseEvent.MOUSE_UP,dropCar); 
     } 

     private function dragCar(e:MouseEvent):void{ 
      this.startDrag(); 
     } 

     private function dropCar(e:MouseEvent):void{ 
      this.stopDrag(); 
     } 

    } 

赤い車やトラックの「車」と呼ばれる自分自身の基本的なクラスを使用します。

ありがとうございます!私は誰かが私を助けることができるといいです

答えて

1

何が問題なのですか? 私が見る主な問題は、新しい車を作ることですが、それを表示リストに追加しないことです。あなたはそれを変更することはできませんので、私はコメントで言ったように だから、問題がある、TAHプロパティグラフィックが読み取り専用である:あなたのクローン機能では、

this.parent.addChild(newcar); 

編集のようなものを必要としています。 あなたの車があなたの車を拡張するクラスのinstaces(そうでない場合は、あなたがそれらを簡単に作ることができる)であれば、あなたはこれを使用することができます: これは最終的にすべき

newcar = new e.target.constructor; 

newcar = new dibujo(); //I think you menat new Car() here 

を置き換えますそれを機能させる。 ドラッグする際に問題が発生します。停止することはありません。しかし、解決策は単純です。あなたのstopDrag関数に次の行を追加してください:

e.target.removeEventListener(MouseEvent.MOUSE_MOVE, dragCar); 
+0

私はあなたの提案を試みましたが、どちらも役に立たなかった。とにかく、私は 'this.parent.numChildren'をトレースし、元の車をクリックするたびに増加します。だから、問題はドラッグ&ドロップ機能に相対的である可能性があります:\ –

+0

あなたは新車のy座標を設定しましたか?あなたはxを設定するのと同じ方法で。 – Kejml

+0

ええと、どちらかがうまくいきませんでした。多分、ムービークリップが作成されているかもしれませんが、その上にグラフィックがあります。しかし、なぜか分からない。 –