【问题标题】:AS3 Child errorAS3 子错误
【发布时间】:2014-04-08 05:19:48
【问题描述】:

正如您将要成为的那样,我对 as3 编码还很陌生...当我尝试删除子项时,我总是会遇到这些错误...
我现在不使用类,只是使用 Include 方法。
TypeError:错误 #1006:removeChild 不是函数。 谁能向我解释如何正确使用它?如果这不是一个如此广泛的问题。

var children = 0;

function pineClick(e:MouseEvent):void {
var chopBtn:MovieClip = new MenuItem  ;
var shakeBtn:MovieClip = new MenuItem  ;
var pineCancelBtn:MovieClip = new MenuItem  ;


if (chopMode == false && children <1) {
    children++;
    addChild(chopBtn);
    chopBtn.x = 250;
    chopBtn.y = 140;
    chopBtn.MenuItemText.text = "Chop";
    addChild(shakeBtn);
    shakeBtn.x = 250;
    shakeBtn.y = 200;
    shakeBtn.MenuItemText.text = "Shake";
    addChild(pineCancelBtn);
    pineCancelBtn.x = 250;
    pineCancelBtn.y = 260;
    pineCancelBtn.MenuItemText.text = "Cancel";
    pineCancelBtn.addEventListener(MouseEvent.CLICK, pineCancelClick);
    chopBtn.addEventListener(MouseEvent.CLICK, pineChopClick);


    function pineChopClick(e:MouseEvent):void {

        var length:uint = inventoryItems.length;
        for (var i:uint= 0; i<length; i++) {
            if (inventoryItems[i] == "Hatchet") {
                itemEquipped = true;
            }
            if (itemEquipped == true) {
                chopMode = true;
                removeChild(shakeBtn);        /////error here//////
                removeChild(pineCancelBtn);   /////////////////////
                removeChild(chopBtn);         /////////////////////
            } else {
                itemEquipped = false;
            }
        }
        if (itemEquipped == false) {
            Output.text = insertTextBefore("You need a Hatchet to cut this.");
        }
    }



    function pineCancelClick(e:MouseEvent):void {
        chopMode = false;
        removeChild(chopBtn);
        removeChild(shakeBtn);
        removeChild(pineCancelBtn);
        children = 0;
    }
}
if (chopMode == true) {
    removeChild(chopBtn);
    removeChild(shakeBtn);
}
}

【问题讨论】:

  • 在删除 shakeBtn 之前对其进行跟踪。你得到不是null的东西吗?

标签: actionscript-3 flash actionscript removechild addchild


【解决方案1】:

您的问题是范围的直接问题。因为您嵌套了函数,所以内部函数失去了作用域。
这正是我们从不嵌套函数的原因。
如果你取消嵌套你的函数,你的问题就会消失

或者你可以试试这个。

MovieClip(root).removeChild(XXXXX)

【讨论】:

  • 我很好奇这个。由于他试图删除的孩子是在他的代码顶部声明的,他们怎么可能在一个深度嵌套的函数中“超出范围”?谢谢,c.u.
  • @Craig 子项在 pineClick 函数中声明。因此,对这些对象的引用(即:chopBtn、shakeBtn、pineCancelBtn)只能从该函数内部访问。所以你在想的是函数 pineChopClick 也在内部声明,它应该也能够引用这些变量,但它确实如此。该函数在点击事件上调用,该事件将在外部函数运行并被垃圾回收之后很久。希望这可以帮助您更好地理解。
【解决方案2】:

这有点hacky,但这应该可以解决问题

if(shakeBtn.parent != null)
    shakeBtn.parent.removeChild(shakeBtn);

【讨论】:

  • 这工作谢谢!我的编码技能还不是很好。我可能应该更多地了解容器。
  • 这行得通,但如果你想让任何事情变得更复杂,你真的应该使用类。为什么它不起作用是因为它可能已经从某个地方删除了,并且您不能 removeChild() 不在您要从中删除的父级内部。例如,也许您只想拥有一个函数 RemoveButtons(),这样您就不必在 3 个不同的地方拥有相同的代码,当您需要删除它时,只需调用该函数即可。
猜你喜欢
  • 2014-04-06
  • 1970-01-01
  • 2012-02-12
  • 2014-12-22
  • 1970-01-01
  • 2017-11-02
  • 2015-10-25
  • 2010-11-30
  • 1970-01-01
相关资源
最近更新 更多