Startdrag不是一个函数

时间:2012-05-21 15:35:25

标签: actionscript-3

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

您好,我想知道为什么以上不起作用?我试图在屏幕上拖动一个精灵。

2 个答案:

答案 0 :(得分: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”的范围。

答案 1 :(得分: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;
       }
   }
}