this.addEventListener(MouseEvent.MOUSE_DOWN,function(e:MouseEvent){this.startDrag(false,null);});
こんにちは、なぜ上記が機能しないのか疑問に思っていましたか? 画面の周りにスプライトをドラッグしようとしています。
this.addEventListener(MouseEvent.MOUSE_DOWN,function(e:MouseEvent){this.startDrag(false,null);});
こんにちは、なぜ上記が機能しないのか疑問に思っていましたか? 画面の周りにスプライトをドラッグしようとしています。
ステージ上にスプライトを作成し、インスタンス名ボックスを追加し、フレーム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」のスコープが原因で、この例は機能しないと思います。
あなたが削除した場合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;
}
}
}