【问题标题】:AS3 Works but I get a ReferenceError: Error #1069 Property startDrag not foundAS3 工作,但我得到一个 ReferenceError: Error #1069 Property startDrag not found
【发布时间】:2013-09-22 23:27:22
【问题描述】:

我正在尝试制作一个简单的项目,当您单击按钮时,可拖动的 MovieClip 会添加到 stag 中,当您单击它时,会将 MovieClip 释放到您单击的 X/Y 位置,然后您可以拾取 MovieClip 并将其拖动进入一个垃圾箱(MovieClip),在那里它会自行销毁。代码运行良好,我可以使用按钮制作多个 Movieclip,当我将它们拖到 bin 中时它们都被破坏了,但是我不喜欢出现“错误代码”。

import flash.events.MouseEvent;
var rubbish:my_mc = new 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;
this.addEventListener(MouseEvent.MOUSE_DOWN, startDragging);
rubbish.buttonMode = true;
}

function stopDragging (event:MouseEvent):void {
    rubbish.stopDrag()
    event.target.addEventListener(MouseEvent.CLICK, startDragging);
    rubbish.buttonMode = true;
            if (event.target.hitTestObject(bin))
            {
                trace("hit");
                 event.target.name = "rubbish"; 
    removeChild(getChildByName("rubbish"));


            }
}
function startDragging (event:MouseEvent):void {
event.target.startDrag();
this.addEventListener(MouseEvent.CLICK, stopDragging);
}

【问题讨论】:

    标签: actionscript-3 flash draggable referenceerror


    【解决方案1】:

    一些指针

    • Eventtarget 属性并不总是看起来那样。它实际上是指事件冒泡过程中的当前阶段。尝试使用 currentTarget 属性。
    • 我还建议将stopDragging 方法绑定到舞台,因为有时您的鼠标不会在您单击时悬停在拖动对象上。
    • 我会使用 MOUSE_UP 事件而不是 CLICK 来进行标准拖动行为。
    • 拖动时,保持对拖动的全局引用,以便在正确的对象上调用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);
    
    }
    

    【讨论】:

    • 嗯,我仍然收到错误,但现在整个舞台在我拖动时移动并且它不喜欢放开垃圾
    • 第 41 行错误 1118 暗示将静态类型的值强制转换为可能的不相关类型 my_mc
    • @ChelsieRaeMcNulty 立即尝试。请注意更改为dragging = event.currentTarget as my_mc;
    • 没有错误了,但是在您拖动并放开舞台上的任何地方后,垃圾就会被删除,它不必像应该那样撞到垃圾箱吗?它的碰撞总是在发生吗?
    • 如果我将 dragging = event.currentTarget 更改为 my_mc; 似乎可以完美运行,没有错误到 event.taget
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-28
    • 1970-01-01
    • 2019-06-07
    • 1970-01-01
    • 2020-02-21
    • 2019-08-11
    相关资源
    最近更新 更多