Actionscript 3 AS3可以工作,但我得到一个ReferenceError:Error#1069属性startDrag未找到

Actionscript 3 AS3可以工作,但我得到一个ReferenceError:Error#1069属性startDrag未找到,actionscript-3,flash,draggable,referenceerror,Actionscript 3,Flash,Draggable,Referenceerror,我试着做一个简单的项目,当你点击一个按钮时,一个可拖动的MovieClip被添加到stag中,当你点击它将MovieClip释放到你点击的X/Y位置时,你可以拾取MovieClip并将其拖动到一个箱子(MovieClip)中,在那里它会自我毁灭。代码工作得很好,我可以用按钮制作多个Movieclips,当我把它们拖进垃圾箱时,它们都被销毁了,但是我不喜欢有“错误代码” 一些指针: import flash.events.MouseEvent; var rubbish:my_mc = new m

我试着做一个简单的项目,当你点击一个按钮时,一个可拖动的MovieClip被添加到stag中,当你点击它将MovieClip释放到你点击的X/Y位置时,你可以拾取MovieClip并将其拖动到一个箱子(MovieClip)中,在那里它会自我毁灭。代码工作得很好,我可以用按钮制作多个Movieclips,当我把它们拖进垃圾箱时,它们都被销毁了,但是我不喜欢有“错误代码”


一些指针

import flash.events.MouseEvent;

var rubbish:my_mc = new my_mc();
var dragging:my_mc;

btntest.addEventListener(MouseEvent.CLICK, makeRubbish);

function makeRubbish (event:MouseEvent):void {

  addChild(rubbish);

  rubbish.x = mouseX - 10;
  rubbish.y = mouseY - 10;
  rubbish.width = 50;
  rubbish.addEventListener(MouseEvent.MOUSE_DOWN, startDragging);
  rubbish.buttonMode = true;

}

function stopDragging (event:MouseEvent):void {

  this.stage.removeEventListener(MouseEvent.MOUSE_UP, stopDragging);

  if(dragging !== null){

    dragging.stopDrag();

    if (event.currentTarget.hitTestObject(bin)){

      removeChild(dragging);

    }

    dragging = null;

  }
}

function startDragging (event:MouseEvent):void {

  dragging = event.currentTarget as my_mc;

  dragging.startDrag();

  this.stage.addEventListener(MouseEvent.MOUSE_UP, stopDragging);

}
  • 事件的
    target
    属性并不总是看起来的那样。它实际上是指事件冒泡过程中的当前阶段。尝试使用
    currentTarget
    属性
  • 我还建议将
    停止拖动
    方法绑定到stage,因为有时候当您单击时,鼠标不会在拖动上方
  • 我会使用
    鼠标向上
    事件,而不是
    单击
    来实现标准的拖动行为
  • 拖动时,保留对拖动的全局引用,以便在正确的对象上调用
    stopDrag
    方法
试试这个

import flash.events.MouseEvent;

var rubbish:my_mc = new my_mc();
var dragging:my_mc;

btntest.addEventListener(MouseEvent.CLICK, makeRubbish);

function makeRubbish (event:MouseEvent):void {

  addChild(rubbish);

  rubbish.x = mouseX - 10;
  rubbish.y = mouseY - 10;
  rubbish.width = 50;
  rubbish.addEventListener(MouseEvent.MOUSE_DOWN, startDragging);
  rubbish.buttonMode = true;

}

function stopDragging (event:MouseEvent):void {

  this.stage.removeEventListener(MouseEvent.MOUSE_UP, stopDragging);

  if(dragging !== null){

    dragging.stopDrag();

    if (event.currentTarget.hitTestObject(bin)){

      removeChild(dragging);

    }

    dragging = null;

  }
}

function startDragging (event:MouseEvent):void {

  dragging = event.currentTarget as my_mc;

  dragging.startDrag();

  this.stage.addEventListener(MouseEvent.MOUSE_UP, stopDragging);

}

嗯,我仍然得到了错误,但现在当我拖动时整个阶段都在移动,它不喜欢放弃rubbishline 41 error 1118将静态类型的值隐式强制为可能不相关的类型_mc@ChelsieRaeMcNulty现在试试。请注意,更改为my_mc的拖动=event.currentTarget不再有错误但是垃圾被删除后,你拖拽并释放在舞台上的任何地方,它不必像它应该的那样击中垃圾箱?如果我将dragging=event.currentTarget更改为我的_mc,它看起来工作得很完美,没有错误;到event.taget