0
this.addEventListener(MouseEvent.MOUSE_DOWN,function(e:MouseEvent){this.startDrag(false,null);});

こんにちは、なぜ上記が機能しないのか疑問に思っていましたか? 画面の周りにスプライトをドラッグしようとしています。

4

2 に答える 2

1

ステージ上にスプライトを作成し、インスタンス名ボックスを追加し、フレーム1にコードを追加します。

box.addEventListener(MouseEvent.MOUSE_DOWN, startMove);

function startMove(evt:MouseEvent):void {
   box.startDrag();
}

box.addEventListener(MouseEvent.MOUSE_UP, stopMove);

function stopMove(e:MouseEvent):void {
   box.stopDrag();
}

イベントリスナーハンドラの「this」のスコープが原因で、この例は機能しないと思います。

于 2012-05-21T16:04:22.903 に答える
0

あなたが削除した場合this.; それが動作します。無名関数を使用しているため、スコープの問題です。イベントの を使用currentTargetできます。これにより、同じリスナーを追加すると、他のボックスもドラッグ可能にすることができます。

注:イベント リスナーとして無名関数を削除するのは難しく、メモリ リークが発生する可能性があるため、名前付き関数への参照を使用するのが最善の方法です。

box.addEventListener(MouseEvent.MOUSE_DOWN, handleMouseEvent);
box.addEventListener(MouseEvent.MOUSE_UP, handleMouseEvent);

function handleMouseEvent(event:MouseEvent):void 
{
    switch(event.type)
    {
       case MouseEvent.MOUSE_DOWN:
       {
         DisplayObject(event.currentTarget).startDrag();
         break;
       }
       case MouseEvent.MOUSE_UP:
       {
         DisplayObject(event.currentTarget).stopDrag();
         break;
       }
   }
}
于 2012-05-22T15:05:00.430 に答える